用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的版本更简单吗?这就是问题所在。