如何使用Java删除字符串中的重复空格?

时间:2010-10-18 12:09:39

标签: java string whitespace

如何使用Java删除字符串中的重复空格(包括制表符,换行符,空格等等)?

9 个答案:

答案 0 :(得分:371)

像这样:

yourString = yourString.replaceAll("\\s+", " ");

例如

System.out.println("lorem  ipsum   dolor \n sit.".replaceAll("\\s+", " "));

输出

lorem ipsum dolor sit.

\s+是什么意思?

\s+是正则表达式。 \s匹配空格,制表符,换行符,回车符,换页符或垂直制表符,+表示“其中一个或多个”。因此,上面的代码将折叠所有“空格子串”长于一个字符,只有一个空格字符。


来源:Java: Removing duplicate white spaces in strings

答案 1 :(得分:24)

您可以使用正则表达式

(\s)\1

将其替换为$1

Java代码:

str = str.replaceAll("(\\s)\\1","$1");

如果输入为"foo\t\tbar ",您将获得"foo\tbar "作为输出,但如果输入为"foo\t bar",则它将保持不变,因为它没有任何连续的空白字符

如果您将所有空格字符(空格,垂直制表符,水平制表符,回车符,换页符,换行符)视为空格,则可以使用以下正则表达式替换任何连续数字单个空格的空白区域:

str = str.replaceAll("\\s+"," ");

但是如果你想用一个空格替换两个连续的空格,你应该这样做:

str = str.replaceAll("\\s{2}"," ");

答案 2 :(得分:9)

试试这个 - 你必须import java.util.regex.*;

    Pattern pattern = Pattern.compile("\\s+");
    Matcher matcher = pattern.matcher(string);
    boolean check = matcher.find();
    String str = matcher.replaceAll(" ");

string是您需要删除重复空格的字符串

答案 3 :(得分:9)

我找到的最快(但不是最漂亮的方式)是

while (cleantext.indexOf("  ") != -1)
  cleantext = StringUtils.replace(cleantext, "  ", " ");

这在Android上与正则表达式相反的速度非常快

答案 4 :(得分:8)

String str = "   Text    with    multiple    spaces    ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"

答案 5 :(得分:6)

虽然为时已晚,但我找到了一个更好的解决方案(对我有用),它将用一个类型的空白空间替换所有连续相同类型的空白区域。那就是:

   Hello!\n\n\nMy    World  

将是

 Hello!\nMy World 

请注意,仍有前导和尾随空格。所以我的完整解决方案是:

str = str.trim().replaceAll("(\\s)+", "$1"));

此处,trim()用“”替换所有前导和尾随空白字符串。 (\\s)用于在组#1 中捕获\\s(即“','\ n','\ t'之类的空格,例如”','\ n','\ t')。 +符号用于匹配1个或多个前面的标记。因此(\\s)+可以是任何单个空格字符('','\ n'或'\ t')中的连续字符(1个或更多)。 $1用于将匹配类型的 group#1 字符串(仅包含1个空格字符)替换匹配的字符串(即匹配的单个空格字符)。上述解决方案将改变如下:

   Hello!\n\n\nMy    World  

将是

Hello!\nMy World

我在这里找不到上面的解决方案,所以我发布了它。

答案 6 :(得分:0)

如果你想摆脱所有领先和尾随无关的空白,那么你想做这样的事情:

// \\A = Start of input boundary
// \\z = End of input boundary 
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");

然后,您可以使用此处列出的其他策略删除重复项:

string = string.replaceAll("\\s+"," ");

答案 7 :(得分:0)

您还可以尝试使用字符串标记符,用于任何空格,制表符,换行符和所有空格。一个简单的方法是,

String s = "Your Text Here";        
StringTokenizer st = new StringTokenizer( s, " " );
while(st.hasMoreTokens())
{
    System.out.print(st.nextToken());
}

答案 8 :(得分:-10)

这可以通过三个步骤实现:

  1. 将字符串转换为字符数组(ToCharArray)
  2. 在charater数组上申请循环
  3. 然后应用字符串替换功能(替换(“你要替换的sting”,“原始字符串”));