回答:
最初のものは単一の空白に一致し、2番目のものは1つ以上の空白に一致します。これらはいわゆる正規表現量指定子であり、次のような一致を実行します(ドキュメントから取得)。
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
これらの2つのreplaceAll
呼び出しは、何に関係なく、常に同じ結果を生成しx
ます。ただし、2つの正規表現は同じではないことに注意してください。
\\s
-単一の空白文字に一致します \\s+
-1つ以上の空白文字のシーケンスに一致します。この場合、すべてを空の文字列に置き換えるため、違いはありません(\\s+
効率の観点から使用する方が適切です)。空でない文字列で置き換える場合、2つは異なる動作をします。
最初の正規表現は1つの空白文字に一致します。2番目の正規表現は、しぶしぶ1つ以上の空白文字と一致します。ほとんどの目的で、これら2つの正規表現は非常に似ていますが、2番目のケースでは、正規表現の一致が失敗しないようにすると、正規表現はより多くの文字列と一致できます。http://www.coderanch.com/t/570917/java/java/regex-differenceから
\s+
であり\s+?
、他の質問とは異なります。