如何使用Java删除字符串中的重复空格(包括制表符,换行符,空格等等)?
答案 0 :(得分:371)
像这样:
yourString = yourString.replaceAll("\\s+", " ");
例如
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
输出
lorem ipsum dolor sit.
\s+
是什么意思?
\s+
是正则表达式。 \s
匹配空格,制表符,换行符,回车符,换页符或垂直制表符,+
表示“其中一个或多个”。因此,上面的代码将折叠所有“空格子串”长于一个字符,只有一个空格字符。
答案 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)
这可以通过三个步骤实现: