如何使用Java删除字符串中的重复空格?
像这样:
yourString = yourString.replaceAll("\\s+", " ");
例如
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
输出
lorem ipsum dolor sit.
是什么\s+
是什么意思?
\s+
是一个正则表达式。 \s
与空格,制表符,换行符,回车符,换页符或垂直制表符匹配,并且+
表示“其中的一个或多个”。因此,上面的代码将使用一个空格字符折叠比一个字符长的所有“空白子字符串”。
试试这个 - 你必须import java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
哪里string
是你的弦上,你需要删除重复的空格
您可以使用正则表达式
(\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}"," ");
这三个步骤是可能的:
- 将字符串中的字符数组(ToCharArray)
- 申请回路系统字符数组
- 然后申请字符串替换功能(更换(“蜇你要替换”,“原始字符串”));
这不是一个好的解决方案,掉到char数组并不能解决任何问题。你实际上没有解释如何做替换,这是问题的核心。也请**不要**完全无关的链接。如果你这样做,你会被标记为垃圾邮件发送者。 – Mat 2011-08-21 14:13:09
如果你想摆脱所有的开头和结尾多余的空白,那么你想要做这样的事情:
// \\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)
用于在组#1中捕获\\s
(即'','\ n','\ t'等白色空格)。 +
符号用于匹配1个或更多前面的标记。因此,(\\s)+
可以是任何单个空格字符('','\ n'或'\ t')中的连续字符(1或更多)。 $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"
为什么没有的replaceAll方法?最新的JDK是否支持这种方法? – 2011-12-20 05:25:53
@SuhSosiev - String.replaceAll()自JDK 1.4以来一直在Java中。 http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#replaceAll(java.lang.String,java.lang.String) – 2011-12-22 19:25:29
我希望我可以添加更多+1对\ s +的真棒解释。 – Cyntech 2012-06-01 12:56:39