답변:
첫 번째는 단일 공백과 일치하는 반면 두 번째는 하나 이상의 공백과 일치합니다. 이들은 소위 정규식 한정자이며 다음과 같은 일치를 수행합니다 ( 문서 에서 가져옴 ).
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+?
다른 질문과는 다릅니다.