我有一个号码需要格式化为电话号码。如果我做
PhoneNumberUtils.formatNumber(numStr);
然后我得到
888-555-1234
但我需要得到的是
(888) 555-1234
我如何获得第二个?是否有标准的android方式?
答案 0 :(得分:15)
如果您知道要执行此操作的国家/地区,则可以使用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());
}
如果您不知道该国家/地区,那么numberStr
使用E.164 format phone number代替国家/地区代码,请使用null。
答案 1 :(得分: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;
}
答案 2 :(得分:4)
您只需使用此功能即可获得:
new PhoneNumberFormattingTextWatcher()
或者看看这个网址:
http://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html
答案 3 :(得分:3)
如果您拥有字符串"888-555-1234"
- 使用PhoneNumberUtils.formatNumber(numStr);
,您只需执行以下操作:
String numStr = "888-555-1234";
numStr = "(" + numStr.substring(0,3) + ") " + numStr.substring(4);
System.out.print(numStr); // (888) 555-1234
然而,这是硬编码的。在这样做之前,您需要确保String有一个完整的10位数字。
答案 4 :(得分:0)
尝试使用正则表达式。 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")
输出:+1(888)555-1234
答案 5 :(得分:0)
2020年的工作解决方案:
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String countryIso = telephonyManager.getNetworkCountryIso().toUpperCase();
phoneNumberTextView.setText(PhoneNumberUtils.formatNumber("3473214567", countryIso));