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

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

159155 次浏览

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

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

其中 string是您的字符串,您需要删除重复的空白

像这样:

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

比如说

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

输出

lorem ipsum dolor sit.

\s+是什么意思?

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


资料来源: Java: 删除字符串中的重复空格

可以使用正则表达式

(\s)\1

还有

$1代替。

Java 代码:

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

如果输入是 "foo\t\tbar ",那么您将得到 "foo\tbar "作为输出 < br > ,但是如果输入是 "foo\t bar",那么它将保持不变,因为它没有任何连续的空格字符。

如果你把所有的空格字符(空格、垂直制表符、水平制表符、回车符、表单提要、新行)都当作空格,那么你可以使用下面的正则表达式用一个空格替换连续空格的 任何数量:

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

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

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

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

  1. 将字符串转换为字符数组(ToCharArray)
  2. 应用于字符数组循环
  3. 然后应用字符串替换函数(替换(“您想替换的刺”,“原始字符串”) ;

如果你想去掉所有前导和尾随的无关空格,那么你可以这样做:

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

然后你可以使用下面列出的其他策略来删除重复项:

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

嗨,我找到的最快的(但不是最漂亮的)方法是

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

这在 android 上运行得非常快,与正则表达式相反

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

   Hello!\n\n\nMy    World

将会是

 Hello!\nMy World

注意仍然有前后空格,因此我的完整解决方案是:

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

在这里,trim()用“”替换所有前导空格字符串和尾随空格字符串。(\\s)用于捕获 第一组中的 \\s(即空格,如‘’、‘ n’、‘ t’)。+符号用于匹配1个或多个前置标记。因此,(\\s)+可以是任何单个空格字符(’、’n’或’t’)中的连续字符(1个或更多)。$1是用匹配类型的 第一组字符串(只包含1个空白字符)替换匹配的字符串(即已匹配的单个空白字符)。上面的解决方案会变成这样:

   Hello!\n\n\nMy    World

将会是

Hello!\nMy World

我还没有找到我的上述解决方案在这里,所以我已经张贴了它。

您还可以尝试对任何空格、制表符、换行符等使用 String Tokeniser,

String s = "Your Text Here";
StringTokenizer st = new StringTokenizer( s, " " );
while(st.hasMoreTokens())
{
System.out.print(st.nextToken());
}
String str = "   Text    with    multiple    spaces    ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"