-1

给定一个带有空格和 + 允许的电话号码,您将如何正确使用正则表达式来格式化它,以便删除非数字和多余的空格?

到目前为止我有这个

String num = "        Ken's Phone is +  123   2213    123    (night time)";
System.out.println(num.replaceAll("[^\\d|+|\\s]", "").replaceAll("\\s\\s+", " ").replaceAll("\\+ ", "\\+").trim());

你会简化它以获得相同的结果吗?

谢谢

4

3 回答 3

1

我会trim()放在第一位,或者至少在你替换每个多个空格之前。

另请记住,这\s意味着空格:[ \t\n\x0B\f\r],如果您只表示 ' ',请使用它。

一个更好的方式来表达你只想要至少两个空格被替换是

replaceAll("\\s{2,}", " ")
于 2013-06-05T09:01:46.110 回答
1

首先提取带空格的数字部分,然后将多个空格压缩为单个空格。然后最后删除加号后面的所有空格:

String numberWithSpaces = str.replaceAll("^[^\\d+]*([+\\d\\s]+)[^\\d]*$", "$1").replaceAll("\\s+", " ").replaceAll("\\+\\s*", "+");

我测试了这段代码,它可以工作。

于 2013-06-05T09:16:41.867 回答
1

您可以将其简化为:

num.replaceAll("[^\\d+\\s]", "")  // [^\\d|+|\\s] => [^\\d+\\s]
   .replaceAll("\\s{2,}", " ")    // \\s\\s+      => \\s{2,}
   .replaceAll("\\+\\s", "+")     // \\+          => +
   .trim()
于 2013-06-05T08:59:53.977 回答