我正在寻找一种用不间断空格替换多个空格的Java正则表达式方法。应使用相同数量的非中断空格替换两个或多个空格,但不应替换单个空格。这需要适用于任何数量的空白。第一个字符可以是1个或更多个空格。
所以如果我的String开头就是这样:
TESTING THIS OUT WITH DIFFERENT CASES
我需要新的String看起来像这样:
TESTING THIS OUT WITH DIFFERENT CASES
答案 0 :(得分:4)
让我们使用一些正则表达式(黑色?)魔法。
String testStr = "TESTING THIS OUT WITH DIFFERENT CASES";
Pattern p = Pattern.compile(" (?= )|(?<= ) ");
Matcher m = p.matcher(testStr);
String res = m.replaceAll(" ");
该模式查找空格后跟另一个空格,或者查找另一个空格。通过这种方式,它可以捕获序列中的所有空白。在我的机器上,使用java 1.6,我得到了预期的结果:
TESTING THIS OUT WITH DIFFERENT CASES
答案 1 :(得分:2)
编辑:这不会处理标点符号,并且重新处理它以处理标点符号会要求它使用与Sergio的答案相同的方法,但需要两步而不是一步。因此,这是一个不充分的答案,已被撤回。
以下原始答案:
我能想到的最简单的方法是两步法。
首先,用“&amp; nbsp;”替换所有空格。这非常快,因为它不一定是正则表达式。
String testStr = "TESTING THIS OUT WITH DIFFERENT CASES";
String replaced = testStr.replace(" ", " ");
接下来,替换“&amp; nbsp;”的任何单个实例有空格。
String replaced2 = replaced.replaceAll("\\b \\b", " ");
System.out.println(replaced2);
结果:
TESTING THIS OUT WITH DIFFERENT CASES
答案 2 :(得分:2)
你也可以一起跳过正则表达式。
String testStr = "TESTING THIS OUT WITH DIFFERENT CASES";
String _replaced = testStr.replace(" ", " ");
String replaced = _replaced.replace(" ", " ");
我没有对此进行过测试,但第一个查找了两个空格的所有情况,并用不间断的空格替换它们。第二个发现存在奇数个空格并用两个nbsps校正的情况。