【问题标题】:String replace continuous whitespace only字符串仅替换连续空格
【发布时间】:2013-03-31 17:25:05
【问题描述】:

我有类似的字符串:

test    text test 

我想保留单个空格,并用  替换多个空格
所以会变成:

tets    text test

这里有人可以推荐我regex吗?

【问题讨论】:

标签: java regex


【解决方案1】:

试试下面的方法会对你有所帮助..

它将Multiple spaces 替换为Single Space..

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

【讨论】:

  • 使用" +" 和两个空格作为第一个参数可能更有效,因为它不会用另一个空格替换单个空格。
  • @Keppil :是的,但他只想替换多个空格,对吧..?
  • 是的,但是你的正则表达式也会用一个空格替换一个空格,这是不必要的。
【解决方案2】:

您可以使用以下替换:

String replaced = str.replaceAll("((?<= ) | (?= ))", "&nbsp;");

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

说明:我在这里使用正则表达式的前瞻和后瞻功能。 ((?&lt;= ) | (?= )) 表示找到一个前面有一个空格(?&lt;= )后面有一个空格(?= ) 这将确保单个空格不会被替换,而是所有多个空格被替换。有关外观的更多详细信息,请参阅此链接:http://www.regular-expressions.info/lookaround.html

【讨论】:

  • @rot:在答案中添加了解释。
  • @rot:不客气。如果此答案对您有用,请单击绿色刻度标记将其标记为已接受:P
【解决方案3】:
String str = "test    text test ";
System.out.println(str.replaceAll("\\s+", " "));

【讨论】:

    【解决方案4】:
    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
    

    如果有奇数个空格,第一个替换会留下一个空格,这样第二个就可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 2020-03-16
      相关资源
      最近更新 更多