Javaの正規表現\sおよび\s+
1. 概要
文字列の置換は、Javaで文字列を処理するときの標準的な操作です。
Stringクラスの便利なreplaceAll()メソッドのおかげで、正規表現を使用して文字列置換を簡単に行うことができます。 ただし、たとえば、式が混乱する場合があります。 \ s と
この短いチュートリアルでは、例を通して2つの正規表現の違いを見ていきます。
2. \sと\s+の違い
正規表現\s は、事前定義された文字クラスです。 単一の空白文字を示します。 空白文字のセットを確認してみましょう。
[ \t\n\x0B\f\r]
プラス記号+は貪欲な数量詞であり、1回以上を意味します。 たとえば、式 X+は1つ以上のX文字と一致します。
したがって、正規表現\ sは単一の空白文字に一致し、\s+は1つ以上の空白文字に一致します。
3. replaceAll()空でない置換
正規表現\sおよび\s+の意味を学習しました。
次に、 replaceAll()メソッドがこれら2つの正規表現でどのように異なる動作をするかを見てみましょう。
すべての例の入力テキストとして文字列を使用します。
String INPUT_STR = "Text With Whitespaces! ";
\ sをreplaceAll()メソッドに引数として渡してみましょう。
String result = INPUT_STR.replaceAll("\\s", "_");
assertEquals("Text___With_____Whitespaces!___", result);
次に、正規表現 \ s +をreplaceAll()メソッドに渡します。
String result = INPUT_STR.replaceAll("\\s+", "_");
assertEquals("Text_With_Whitespaces!_", result);
貪欲な数量詞+により、 replaceAll()メソッドは、連続する空白文字の最長シーケンスと一致し、各一致をアンダースコアに置き換えます。
入力テキストには、連続する空白文字の3つのシーケンスがあります。 したがって、3つのそれぞれがアンダースコアになります。
4. replaceAll()空の置換あり
replaceAll()メソッドのもう1つの一般的な使用法は、入力テキストから一致するパターンを削除することです。 通常、メソッドの代わりに空の文字列を渡すことでこれを行います。
replaceAll()メソッドと \ s 正規表現を使用して空白文字を削除すると、どのような結果が得られるかを見てみましょう。
String result1 = INPUT_STR.replaceAll("\\s", "");
assertEquals("TextWithWhitespaces!", result1);
次に、他の正規表現 \ s +をreplaceAll()メソッドに渡します。
String result2 = INPUT_STR.replaceAll("\\s+", "");
assertEquals("TextWithWhitespaces!", result2);
置換は空の文字列であるため、2つの正規表現の意味が異なっていても、2つの replaceAll()呼び出しは同じ結果を生成します。
assertEquals(result1, result2);
2つのreplaceAll()呼び出しを比較すると、 \ s+の呼び出しの方が効率的です。 これは、 \ s を使用した呼び出しでは、11回の置換が行われるのに対し、3回の置換でのみジョブが実行されるためです。
5. 結論
この短い記事では、正規表現 \sと\s+について学びました。
また、 replaceAll()メソッドが2つの式でどのように異なる動作をするかを見ました。
いつものように、コードはGitHubでから入手できます。