android:如何将数字格式化为带括号的手机号码

use*_*402 11 android phone-number number-formatting libphonenumber

我有一个号码需要格式化为电话号码.如果我做

 PhoneNumberUtils.formatNumber(numStr);
Run Code Online (Sandbox Code Playgroud)

然后我明白了

888-555-1234
Run Code Online (Sandbox Code Playgroud)

但我需要得到的是

(888) 555-1234
Run Code Online (Sandbox Code Playgroud)

我如何获得第二个?有标准的android方式吗?

Sho*_*uri 17

如果您知道要执行此操作的国家/地区,则可以使用Google的开源库libphonenumber.以下是如何格式化它:

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());
}
Run Code Online (Sandbox Code Playgroud)

如果您不知道该国家,那么numberStr使用E.164格式的电话号码而不是国家代码使用null.


Sal*_*ana 9

不知道你是否找到了你想要的东西,但我最后写了一个小字符串长度的方法(因为我得到的电话号码来自网络服务,可以是各种格式).我相信它应该可行(到目前为止,我的所有测试用例都是前两个选项 - 尚未测试其他两个选项).

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;
}
Run Code Online (Sandbox Code Playgroud)