【发布时间】:2011-04-26 21:57:58
【问题描述】:
如何使用 Java 去除字符串中重复的空格(包括制表符、换行符、空格等)?
【问题讨论】:
标签: java string whitespace
如何使用 Java 去除字符串中重复的空格(包括制表符、换行符、空格等)?
【问题讨论】:
标签: java string whitespace
像这样:
yourString = yourString.replaceAll("\\s+", " ");
例如
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
输出
lorem ipsum dolor sit.
\s+ 是什么意思?
\s+ 是一个正则表达式。 \s 匹配空格、制表符、换行符、回车、换页或垂直制表符,+ 表示“其中一个或多个”。因此,上面的代码将折叠所有长于一个字符的“空白子字符串”,并带有一个空格字符。
【讨论】:
\s+ 但 2 反斜杠 \\ 是什么意思?
"\\" 表示由单个反斜杠组成的字符串。所以要代表\s+,你写"\\s+"。
你可以使用正则表达式
(\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}"," ");
【讨论】:
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
【讨论】:
试试这个 - 你必须import java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
string 是您需要删除重复空格的字符串
【讨论】:
嗨,我发现最快(但不是最漂亮的方式)是
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) 用于捕获 group #1 中的\\s(即' '、'\n'、'\t'等空格)。 + 符号用于匹配 1 个或多个前面的令牌。所以(\\s)+ 可以是任何单个空白字符(' '、'\n' 或 '\t')中的连续字符(1 个或多个)。 $1 用于将匹配字符串替换为匹配类型的group #1 字符串(仅包含1 个空格字符)(即匹配的单个空格字符)。上面的解决方案会变成这样:
Hello!\n\n\nMy World
将会
Hello!\nMy World
我在这里没有找到我上面的解决方案,所以我已经发布了。
【讨论】:
如果你想摆脱所有前导和尾随无关空格,那么你想做这样的事情:
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
然后您可以使用此处列出的其他策略删除重复项:
string = string.replaceAll("\\s+"," ");
【讨论】:
您也可以尝试对任何空格、制表符、换行符等使用字符串标记器。一个简单的方法是,
String s = "Your Text Here";
StringTokenizer st = new StringTokenizer( s, " " );
while(st.hasMoreTokens())
{
System.out.print(st.nextToken());
}
【讨论】:
这可以通过三个步骤来实现:
【讨论】: