2012-02-27 38 views

回答

5
str = str.replaceAll("(?<=\\d)\\s(?=\\d)", "-"); 

这看起来为一个数字((?<=\\d))之前和之后的一个数字((?=\\d))的空间(\\s),并替换为破折号该空间。

如果要替换连续空格组,请将\\s更改为\\s+

0

非正则表达式的解决方案:

String in = "I am Bob 12 12"; 
int last = in.length()-1; 
StringBuilder resultBuilder = new StringBuilder(); 
resultBuilder.append(in.charAt(0)); // assumes, the String has at least one char 

for (int i = 1; i < last-1; i++) { 
    if (in.charAt(i) == ' ' && 
     Character.isDigit(in.charAt(i-1)) && 
     Character.isDigit(in.charAt(i+1))) { 
    resultBuilder.append('-'); 
    } else { 
    resultBuilder.append(in.charAt(i)); 
    } 
} 
resultBuilder.append(in.charAt(last)); 
// System.out.println(resultBuilder); 
+1

为什么地球上,你会希望有一个“非正则表达式”的解决方案,需要十几行,是不是非常具有可读性,当一个正则表达式的解决方案是非常适合,易于阅读,只需要一行?嘘! – Bohemian 2012-02-27 11:21:57

+0

;)可读性值得单独讨论。就我个人而言,我讨厌看无证正则表达式,并试图找出,作者想告诉我们什么,以及为什么它不与我的示例字符串:D – 2012-02-27 11:32:36