替换字符串中连续的空格

3

我有一个字符串:

test    text test 

我希望保留单个空格,并用 替换多个空格。
转化后结果为:

tets    text test

请问这里有人能给我推荐一个正则表达式吗?


5
可能是重复的问题:https://dev59.com/ckzSa4cB1Zd3GeqPllWe请提供需要翻译的具体内容。 - Damon
4个回答

4
您可以使用以下替换:
String replaced = str.replaceAll("((?<= ) | (?= ))", "&nbsp;");

演示: http://ideone.com/kNb7rd

说明: 我在这里使用了正则表达式的前瞻和后顾功能。 ((?<= ) | (?= )) 意味着查找一个空格,它要么是前面有一个空格(?<= )要么是后面跟着一个空格(?= )。这将确保单个空格不被替换,但所有多个空格都将被替换。有关前瞻和后顾的更多详细信息,请参见此链接:http://www.regular-expressions.info/lookaround.html


@rot:答案已附带解释。 - anubhava
@rot:不用谢。如果这个答案对您有帮助,请点击绿色勾号标记为已采纳 :P - anubhava

0
String str="test     text test";
str=str.replaceAll("\\s\\s","&nbsp;&nbsp;");
str=str.replaceAll("&nbsp;\\s","&nbsp;&nbsp;");//It will work for Odd number

第一个替换操作会在空格数为奇数时留下一个空格,因此第二个替换操作可以解决这个问题。


0

尝试像下面这样做,它会帮助你。

它将用单个空格替换多个空格

YourString.trim().replaceAll(" +", " ");

使用 " +" 作为第一个参数可能更有效,因为它不会将单个空格替换为另一个单个空格。 - Keppil
@Keppil:是的,但他只想替换多个空格对吧..? - Pandian
是的,但您的正则表达式还将一个空格替换为一个空格,这是不必要的。 - Keppil

0
String str = "test    text test ";
System.out.println(str.replaceAll("\\s+", " "));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接