Answers:
第一个匹配单个空格,而第二个匹配一个或多个空格。它们是所谓的正则表达式量词,它们执行这样的匹配(摘自文档):
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
replaceAll
无论是什么,这两个调用将始终产生相同的结果x
。但是,必须注意两个正则表达式不同:
\\s
-匹配单个空格字符 \\s+
-匹配一个或多个空格字符的序列。在这种情况下,这没有什么区别,因为您将所有内容替换为空字符串(尽管\\s+
从效率的角度来看最好使用)。如果要用非空字符串替换,则两者的行为会有所不同。
第一个正则表达式将匹配一个空格字符。第二个正则表达式将勉强匹配一个或多个空格字符。在大多数情况下,这两个正则表达式非常相似,但在第二种情况下,如果正则表达式可以防止匹配失败,则可以匹配更多的字符串。来自http://www.coderanch.com/t/570917/java/java/regex-difference
\s+
,而不是\s+?
其他问题。