android: how do I format number as phone with parentheses

前端 未结 6 1114
悲&欢浪女
悲&欢浪女 2020-12-15 23:14

I have a number that I need to format as a telephone number. If I do

 PhoneNumberUtils.formatNumber(numStr);

Then I get

888         


        
相关标签:
6条回答
  • 2020-12-15 23:54

    If you have the String "888-555-1234" - by using PhoneNumberUtils.formatNumber(numStr); you can simply do this:

    String numStr = "888-555-1234";
    
    numStr = "(" + numStr.substring(0,3) + ") " + numStr.substring(4);
    
    System.out.print(numStr); // (888) 555-1234
    

    However, this is hard coded. You would need to make sure the String had a full 10 digits before doing so.

    0 讨论(0)
  • 2020-12-16 00:06

    If you know the country for which you want to do it, you can use Google's open source library libphonenumber . Here is how you can format it:

    String numberStr = "8885551234"
    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
    try {
      PhoneNumber numberProto = phoneUtil.parse(numberStr, "US");
      //Since you know the country you can format it as follows:
      System.out.println(phoneUtil.format(numberProto, PhoneNumberFormat.NATIONAL));
    } catch (NumberParseException e) {
      System.err.println("NumberParseException was thrown: " + e.toString());
    }
    

    If you don't know the country then for numberStr use E.164 format phone number and in place of country code use null.

    0 讨论(0)
  • 2020-12-16 00:11

    Don't know if you found what you were looking for, but I ended up writing a little method that takes the length of a string (since the phone numbers I get come from a web service and can be a variety of formats). I believe it should work (so far all my test cases have been with the first two options -- haven't tested the other two yet).

    public static String FormatStringAsPhoneNumber(String input) {
        String output;
        switch (input.length()) {
            case 7:
                output = String.format("%s-%s", input.substring(0,3), input.substring(3,7));
                break;
            case 10:
                output = String.format("(%s) %s-%s", input.substring(0,3), input.substring(3,6), input.substring(6,10));
                break;
            case 11:
                output = String.format("%s (%s) %s-%s", input.substring(0,1) ,input.substring(1,4), input.substring(4,7), input.substring(7,11));
                break;
            case 12:
                output = String.format("+%s (%s) %s-%s", input.substring(0,2) ,input.substring(2,5), input.substring(5,8), input.substring(8,12));
                break;
            default:
                return null;
        }
        return output;
    }
    
    0 讨论(0)
  • 2020-12-16 00:11

    You simply use this and get you want :

    new PhoneNumberFormattingTextWatcher()
    

    or Have look at this url :

    http://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html

    0 讨论(0)
  • 2020-12-16 00:11

    Try to use regex. This will help you. As for me, i use this:

                            var result = "+1 888-555-1234"
    
    
                            if (Pattern.compile("^\\+[\\d]+\\s[\\d]{1,3}\\s[\\d]+").matcher(result).find()) {
                                result = result.replaceFirst(" ", "(").replaceFirst(" ", ")").replace(" ","-")
                            }
    
                            if(Pattern.compile("^\\+[\\d]+\\s[\\d]{1,3}-[\\d]+").matcher(result).find()){
                                result = result.replaceFirst(" ", "(").replaceFirst("-", ")")
                            }
                            Timber.d("$result")
    

    output: +1(888)555-1234

    0 讨论(0)
  • 2020-12-16 00:16

    Working solution in 2020:

    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    
    String countryIso = telephonyManager.getNetworkCountryIso().toUpperCase();
    
    phoneNumberTextView.setText(PhoneNumberUtils.formatNumber("3473214567", countryIso));
    
    0 讨论(0)
提交回复
热议问题