Java \\ s中的正则expression式与\\ s +
请问,这些expression式有什么区别?
x = x.replaceAll("\\s", ""); x = x.replaceAll("\\s+", "");
第一个匹配一个空格,而第二个匹配一个或多个空格。 他们是所谓的正则expression式量词,他们执行这样的匹配(从文档中获取 ):
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
调用总是会产生相同的结果,不pipex
是什么。 但是,重要的是要注意两个正则expression式是不一样的:
-
\\s
– 匹配单个空格字符 -
\\s+
– 匹配一个或多个空格字符的序列。
在这种情况下,没有什么区别,因为你用一个空stringreplace了所有的东西(尽pipe从效率的angular度来看最好使用\\s+
)。 如果你用一个非空stringreplace,那么这两个字符的行为就会有所不同。
首先,你需要明白,这两个语句的最终输出将是相同的,即删除给定string的所有空格。
但是x.replaceAll("\\s+", "");
将是更有效的修剪空间的方法(如果string可以有多个连续的空格),因为可能不需要replace,因为正则expression式\\s+
匹配一个或多个空格,并用空stringreplace它们。
所以,即使你从两个相同的输出,它是更好的使用:
x.replaceAll("\\s+", "");
第一个正则expression式将匹配一个空格字符。 第二个正则expression式将不情愿地匹配一个或多个空格字符。 对于大多数用途来说,这两个正则expression式非常相似,除了第二种情况,正则expression式可以匹配更多的string,如果阻止正则expression式匹配失败。 来自http://www.coderanch.com/t/570917/java/java/regex-difference