格式化法语 phone 号码
Format a french phone number
我必须将“0612345678”格式化为“06 12 34 56 78”。
我目前正在使用这个:
private String FormatTel(String number) {
try {
String formattedNumber = "";
int i;
for (i = 0; i < 10; i += 2) {
formattedNumber += number.substring(i, i + 2) + " ";
}
return formattedNumber.substring(0, formattedNumber.length() - 1);
} catch (IndexOutOfBoundsException e) {
return number;
}
}
它只适用于我的模拟器,即 运行 API 16 (JellyBean 4.1.1):在它上面,结果看起来像我想要的 ("06 12 34 56 78" ) 但在我自己 phone, (API 22, Lollipop 5.1.1) 上,它不起作用:结果是“0 61 23 45 67”,而方法是相同的!
我做了一些研究,找到了 String.Format 方法。但是我在这里需要帮助,这对我来说太难了...!
提前谢谢你:D
编辑:
工作方式,使用libphone编号:
private String FormatTel(String number) {
String formattedNumber = number;
try {
PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber numberProto;
numberProto = phoneNumberUtil.parse(number, "FR");
formattedNumber = phoneNumberUtil.format(numberProto, PhoneNumberUtil.PhoneNumberFormat.NATIONAL);
} catch (NumberParseException e) {
e.printStackTrace();
}
return formattedNumber;
}
感谢 Ye Lin Aung !
我已经在我的 Lollipop phone 上尝试了您的代码,它可以正常工作。
或者,我总是建议使用 libphonenumber 来轻松解析 phone 数字,只要涉及到对 phone 数字做任何事情。这是如何完成的。
try {
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber numberProto;
numberProto = phoneUtil.parse("+330612345678", "");
Log.i("code",
"code " + phoneUtil.format(numberProto, PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
} catch (NumberParseException e) {
e.printStackTrace();
}
结果
I/code﹕ code 06 12 34 56 78
你可以写一个简单的正则表达式。
"0612345678".replaceAll("(.{2})", " ");
这里我们尝试将两个字符分组,然后用该组的值加一个替换每个组 space。
()
表示一组
.{2}
任意两个字符
$x
会选出第x组。
注意:这会在最后添加额外的 space,您可能需要 trim 字符串。
char[] charArray = YourString.toCharArray();
String finalString = "";
for(int i=0; i<charArray.length; i++) {
if(i!=0 && i%2==0)
finalString += " " + charArray[i];
else
finalString += charArray[i];
}
将字符串分解成一个字符数组,然后边做边添加。应该可以正常工作。您也不必在最后 trim 它。
我必须将“0612345678”格式化为“06 12 34 56 78”。
我目前正在使用这个:
private String FormatTel(String number) {
try {
String formattedNumber = "";
int i;
for (i = 0; i < 10; i += 2) {
formattedNumber += number.substring(i, i + 2) + " ";
}
return formattedNumber.substring(0, formattedNumber.length() - 1);
} catch (IndexOutOfBoundsException e) {
return number;
}
}
它只适用于我的模拟器,即 运行 API 16 (JellyBean 4.1.1):在它上面,结果看起来像我想要的 ("06 12 34 56 78" ) 但在我自己 phone, (API 22, Lollipop 5.1.1) 上,它不起作用:结果是“0 61 23 45 67”,而方法是相同的!
我做了一些研究,找到了 String.Format 方法。但是我在这里需要帮助,这对我来说太难了...!
提前谢谢你:D
编辑:
工作方式,使用libphone编号:
private String FormatTel(String number) {
String formattedNumber = number;
try {
PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber numberProto;
numberProto = phoneNumberUtil.parse(number, "FR");
formattedNumber = phoneNumberUtil.format(numberProto, PhoneNumberUtil.PhoneNumberFormat.NATIONAL);
} catch (NumberParseException e) {
e.printStackTrace();
}
return formattedNumber;
}
感谢 Ye Lin Aung !
我已经在我的 Lollipop phone 上尝试了您的代码,它可以正常工作。
或者,我总是建议使用 libphonenumber 来轻松解析 phone 数字,只要涉及到对 phone 数字做任何事情。这是如何完成的。
try {
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber numberProto;
numberProto = phoneUtil.parse("+330612345678", "");
Log.i("code",
"code " + phoneUtil.format(numberProto, PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
} catch (NumberParseException e) {
e.printStackTrace();
}
结果
I/code﹕ code 06 12 34 56 78
你可以写一个简单的正则表达式。
"0612345678".replaceAll("(.{2})", " ");
这里我们尝试将两个字符分组,然后用该组的值加一个替换每个组 space。
()
表示一组.{2}
任意两个字符
$x
会选出第x组。
注意:这会在最后添加额外的 space,您可能需要 trim 字符串。
char[] charArray = YourString.toCharArray();
String finalString = "";
for(int i=0; i<charArray.length; i++) {
if(i!=0 && i%2==0)
finalString += " " + charArray[i];
else
finalString += charArray[i];
}
将字符串分解成一个字符数组,然后边做边添加。应该可以正常工作。您也不必在最后 trim 它。