格式化法语 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 它。