我尝试使用以下代码在 android 中格式化电话号码:-
public static String formatPhoneNumber(String number){
return PhoneNumberUtils.formatNumber(number);
}
我将“19253951646”传递给函数。它返回格式为 1-925-395-1646 的文本。我想要格式为 1(925)395-1646 的结果。任何帮助都会受到高度评价。
我尝试使用以下代码在 android 中格式化电话号码:-
public static String formatPhoneNumber(String number){
return PhoneNumberUtils.formatNumber(number);
}
我将“19253951646”传递给函数。它返回格式为 1-925-395-1646 的文本。我想要格式为 1(925)395-1646 的结果。任何帮助都会受到高度评价。
写了我自己的函数来格式化数字。
public static String formatPhoneNumber(String number){
number = number.substring(0, number.length()-4) + "-" + number.substring(number.length()-4, number.length());
number = number.substring(0,number.length()-8)+")"+number.substring(number.length()-8,number.length());
number = number.substring(0, number.length()-12)+"("+number.substring(number.length()-12, number.length());
return number;
}
这是我的代码,运行没有错误:
mobile.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
StringBuilder digits = new StringBuilder();
StringBuilder phone = new StringBuilder();
char[] chars = mobile.getText().toString().toCharArray();
for (int x = 0; x < chars.length; x++) {
if (Character.isDigit(chars[x])) {
digits.append(chars[x]);
}
}
//Format for 6 digits and below
if (digits.toString().length() >= 6) {
String six = new String();
six += digits.toString();
phone.append(six);
//Format for 7 digits
if (digits.toString().length() >= 7) {
phone.setLength(0);
String countryCode = new String();
countryCode += digits.toString().substring(0, 3) + "-";
countryCode += digits.toString().substring(3,7);
phone.append(countryCode);
//Format for 8 and 9 digits
if (digits.toString().length() >= 8) {
phone.setLength(0);
String eight = new String();
eight += digits.toString();
phone.append(eight);
//Format for 10 digits
if (digits.toString().length() >= 10) {
phone.setLength(0);
String regionCode = new String();
regionCode += "(" + digits.toString().substring(0, 3) + ") ";
regionCode += digits.toString().substring(3, 6) + "-";
phone.append(regionCode);
//Format for 11 digits
if (digits.toString().length() >= 11) {
String code = new String();
phone.setLength(0);
code += digits.toString().substring(0, 1);
code += "(" + digits.toString().substring(1, 4) + ")- ";
code += digits.toString().substring(4, 7) + "-";
code += digits.toString().substring(7, 11);
phone.append(code);
//Format for 12 digits
if (digits.toString().length() >= 12) {
String newCode = new String();
phone.setLength(0);
newCode += "+" + digits.toString().substring(0, 2);
newCode += "(" + digits.toString().substring(2, 5) + ")";
newCode += digits.toString().substring(5, 8) + "-";
newCode += digits.toString().substring(8, 12);
phone.append(newCode);
//Format for 12 digits and more
if (digits.toString().length() >= 13) {
String noMoreThanTwelve = new String();
phone.setLength(0);
noMoreThanTwelve += digits.toString();
phone.append(noMoreThanTwelve);
}
}
} else {
phone.append(digits.toString().substring(6));
}
}
}
}
mobile.removeTextChangedListener(this);
mobile.setText(phone.toString());
mobile.setSelection(mobile.getText().toString().length());
mobile.addTextChangedListener(this);
} else {
return;
}
}
});
这是我的代码的输出:
7位以下:123456 = 123456
7 位数字:1234567 = 123-4567
8 位 12345678 = 12345678
9 位 123456789 = 123456789
10 位数 1234567890 = (123) 456-7890
11 位 12345678901 = 1 (234) 567-8901
12 位 123456789012 = +12 (345) 678-9012
12位以上12345678901234 ....
很抱歉使用这些变量,但我希望你能理解我的代码。
Android SDKs PhoneNumberUtils或多或少有足够的电话号码格式化工具,但有时可能不足以满足特殊需求。
试用替代库libphonenumber ,该库被描述为“Google 的通用 Java、C++ 和 JavaScript 库,用于解析、格式化、存储和验证国际电话号码。Java 版本针对在智能手机上运行进行了优化,自 4.0 (Ice Cream) 起就被 Android 框架使用三明治)。”
图书馆有不同的电话号码格式选项。
1-925-395-1646
号码有国际美国格式。如果你想要自定义格式,你可以手动解析数字并格式化他。
因此,您可以尝试在数字前插入 +1。
我的 iPhone 上的证明: