Java Regex只用非中断空格替换多个空格

时间:2010-03-03 16:05:08

标签: java html regex

我正在寻找一种用不间断空格替换多个空格的Java正则表达式方法。应使用相同数量的非中断空格替换两个或多个空格,但不应替换单个空格。这需要适用于任何数量的空白。第一个字符可以是1个或更多个空格。

所以如果我的String开头就是这样:

TESTING THIS  OUT   WITH    DIFFERENT     CASES

我需要新的String看起来像这样:

TESTING THIS  OUT   WITH    DIFFERENT     CASES

3 个答案:

答案 0 :(得分:4)

让我们使用一些正则表达式(黑色?)魔法。

String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
Pattern p = Pattern.compile(" (?= )|(?<= ) ");
Matcher m = p.matcher(testStr);
String res = m.replaceAll("&nbsp;");

该模式查找空格后跟另一个空格,或者查找另一个空格。通过这种方式,它可以捕获序列中的所有空白。在我的机器上,使用java 1.6,我得到了预期的结果:

TESTING THIS&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;WITH&nbsp;&nbsp;&nbsp;&nbsp;DIFFERENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CASES

答案 1 :(得分:2)

编辑:这不会处理标点符号,并且重新处理它以处理标点符号会要求它使用与Sergio的答案相同的方法,但需要两步而不是一步。因此,这是一个不充分的答案,已被撤回。


以下原始答案:

我能想到的最简单的方法是两步法。

首先,用“&amp; nbsp;”替换所有空格。这非常快,因为它不一定是正则表达式。

String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
String replaced = testStr.replace(" ", "&nbsp;");

接下来,替换“&amp; nbsp;”的任何单个实例有空格。

String replaced2 = replaced.replaceAll("\\b&nbsp;\\b", " ");
System.out.println(replaced2);

结果:

TESTING THIS&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;WITH&nbsp;&nbsp;&nbsp;&nbsp;DIFFERENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CASES

答案 2 :(得分:2)

你也可以一起跳过正则表达式。

String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
String _replaced = testStr.replace("  ", "&nbsp;&nbsp;");
String replaced = _replaced.replace("&nbsp; ", "&nbsp;&nbsp;");

我没有对此进行过测试,但第一个查找了两个空格的所有情况,并用不间断的空格替换它们。第二个发现存在奇数个空格并用两个nbsps校正的情况。