Answers:
像这样:
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}"," ");
试试这个-您必须 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上运行非常快
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
尽管为时已晚,但我发现了一个更好的解决方案(对我有用),该解决方案将所有连续的相同类型的空白替换为该类型的一个空白。那是:
Hello!\n\n\nMy World
将会
Hello!\nMy World
请注意,仍然存在前导和尾随空格。所以我完整的解决方案是:
str = str.trim().replaceAll("(\\s)+", "$1"));
在此,trim()
将所有前导和尾随空格字符串替换为“”。(\\s)
用于\\s
在组#1中捕获(例如'','\ n','\ t'等空白)。+
符号用于匹配1个或多个前面的令牌。所以(\\s)+
可以是任何单一的空白字符中的连续字符(1或更大)(””,‘\ n’或‘\ T’)。$1
用于用匹配类型(即已匹配的单个空格字符)的组#1字符串(仅包含1个空格字符)替换匹配的字符串。上面的解决方案将像这样更改:
Hello!\n\n\nMy World
将会
Hello!\nMy World
我在这里找不到上述解决方案,因此已将其发布。
这可以通过三个步骤实现: