Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java格式化电话号码的正则表达式_Java_Regex - Fatal编程技术网

用java格式化电话号码的正则表达式

用java格式化电话号码的正则表达式,java,regex,Java,Regex,给定一个带有空格和+的电话号码,您将如何更正正则表达式的格式,以便删除非数字和多余的空格 到目前为止,我有这个 String num = " Ken's Phone is + 123 2213 123 (night time)"; System.out.println(num.replaceAll("[^\\d|+|\\s]", "").replaceAll("\\s\\s+", " ").replaceAll("\\+ ", "\\+").trim()); 你

给定一个带有空格和+的电话号码,您将如何更正正则表达式的格式,以便删除非数字和多余的空格

到目前为止,我有这个

String num = "        Ken's Phone is +  123   2213    123    (night time)";
System.out.println(num.replaceAll("[^\\d|+|\\s]", "").replaceAll("\\s\\s+", " ").replaceAll("\\+ ", "\\+").trim());
你能把它简化以便得到同样的结果吗


谢谢

您可以将其简化为:

num.replaceAll("[^\\d+\\s]", "")  // [^\\d|+|\\s] => [^\\d+\\s]
   .replaceAll("\\s{2,}", " ")    // \\s\\s+      => \\s{2,}
   .replaceAll("\\+\\s", "+")     // \\+          => +
   .trim()
我会把
trim()
放在第一位,或者至少在你替换多个空格之前

还要记住,
\s
表示空白:[\t\n\x0B\f\r],如果您只表示“”,请使用它

表示您只希望至少替换两个空格的更好方法是

replaceAll("\\s{2,}", " ")

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

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

我测试了这段代码,它运行正常。

这会删除组之间的空格。OP只希望删除额外的空格,而不是所有空格和+“带空格和+允许”,您运行了他的代码吗?我删除了前面的注释,抱歉
replaceAll(“\\s+”,“”)
将用单个空间替换每个空间,如果只有多个空间,则更有效。我同意这一点,但它比OP的版本更简单吗?这就是问题所在。