如何在Java中将电话号码格式化为字符串?

2022-09-01 06:17:23

我一直在将电话号码存储为长,我想在将电话号码打印为字符串时简单地添加连字符。

我尝试使用,但不喜欢连字符。可能是因为它用于格式化十进制数而不是长整数。DecimalFormat

long phoneFmt = 123456789L;
DecimalFormat phoneFmt = new DecimalFormat("###-###-####");
System.out.println(phoneFmt.format(phoneNum)); //doesn't work as I had hoped

理想情况下,我也希望在区号上加上括号。

new DecimalFormat("(###)-###-####");

正确的方法是什么?


答案 1

您可以使用 String.replaceFirst 与正则表达式方法,例如

    long phoneNum = 123456789L;
    System.out.println(String.valueOf(phoneNum).replaceFirst("(\\d{3})(\\d{3})(\\d+)", "($1)-$2-$3"));

答案 2

要获得所需的输出:

long phoneFmt = 123456789L;
//get a 12 digits String, filling with left '0' (on the prefix)   
DecimalFormat phoneDecimalFmt = new DecimalFormat("0000000000");
String phoneRawString= phoneDecimalFmt.format(phoneFmt);

java.text.MessageFormat phoneMsgFmt=new java.text.MessageFormat("({0})-{1}-{2}");
    //suposing a grouping of 3-3-4
String[] phoneNumArr={phoneRawString.substring(0, 3),
          phoneRawString.substring(3,6),
          phoneRawString.substring(6)};

System.out.println(phoneMsgFmt.format(phoneNumArr));

控制台上的结果如下所示:

(012)-345-6789

要存储电话号码,应考虑使用数字以外的数据类型