下面两个表达式之间的区别是什么?
x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", "");
发布于 2013-03-26 06:02:06
第一个匹配一个空格,第二个匹配一个或多个空格。它们是所谓的正则表达式量词,它们执行如下匹配(取自documentation):
Greedy quantifiers
X? X, once or not at all
X* X, zero or more times
X+ X, one or more times
X{n} X, exactly n times
X{n,} X, at least n times
X{n,m} X, at least n but not more than m times
Reluctant quantifiers
X?? X, once or not at all
X*? X, zero or more times
X+? X, one or more times
X{n}? X, exactly n times
X{n,}? X, at least n times
X{n,m}? X, at least n but not more than m times
Possessive quantifiers
X?+ X, once or not at all
X*+ X, zero or more times
X++ X, one or more times
X{n}+ X, exactly n times
X{n,}+ X, at least n times
X{n,m}+ X, at least n but not more than m times
发布于 2013-03-26 06:04:31
首先,您需要了解两个语句的最终输出将是相同的,即删除给定字符串中的所有空格。
然而,x.replaceAll("\\s+", "");
将是更有效的修剪空格的方法(如果字符串可以有多个连续的空格),因为由于正则表达式\\s+
一次匹配一个或多个空格并将它们替换为空字符串的事实,没有替换的可能性更小。
因此,即使您从这两个命令中获得相同的输出,最好使用:
x.replaceAll("\\s+", "");
发布于 2013-03-26 06:02:42
第一个正则表达式将匹配一个空格字符。第二个正则表达式将不情愿地匹配一个或多个空白字符。对于大多数目的,这两个正则表达式非常相似,除了在第二种情况下,正则表达式可以匹配字符串的更多部分,前提是它可以防止正则表达式匹配失败。来自http://www.coderanch.com/t/570917/java/java/regex-difference的
https://stackoverflow.com/questions/15625629
复制相似问题