ホームページ > Java > &#&チュートリアル > \'.*\' を使用すると String.replaceAll(regex) が 2 回置換されるのはなぜですか?

\'.*\' を使用すると String.replaceAll(regex) が 2 回置換されるのはなぜですか?

Susan Sarandon
リリース: 2024-10-31 16:03:46
オリジナル
708 人が閲覧しました

Why does String.replaceAll(regex) replace twice when using

String.replaceAll(regex) が 2 回置換される理由

コード スニペット内:

System.out.println("test".replaceAll(".*", "a"));
ログイン後にコピー

正規表現.* は、ゼロ文字を含む任意の文字に一致します。これは、文字列全体と 2 回一致できることを意味します。

  • 最初のパスでは、.* は文字列全体と一致し、それを "a" に置き換えます。
  • 2 番目のパスでは、 .* は入力の末尾にある空の文字列と一致し (ゼロ文字と一致する可能性があるため)、それを別の "a" に置き換えます。

この動作は Java 正規表現エンジンのバグとはみなされません。代わりに、これは .* が任意の文字に一致する方法の結果です。

代替手段

この動作を回避するには、次の代替手段を使用できます:

  • 最初に出現したもののみを置換するには .replaceFirst() を使用します:
"test".replaceFirst(".*", "a")
ログイン後にコピー
  • 文字列全体が指定された正規表現と一致するかどうかを確認するには .matches() を使用します:
System.out.println("test".matches(".*")); // Prints true
ログイン後にコピー
  • など、より具体的な正規表現を使用します。 少なくとも 1 つの文字が必要です:
System.out.println("test".replaceAll(".+", "a")); // Prints a
ログイン後にコピー

以上が\'.*\' を使用すると String.replaceAll(regex) が 2 回置換されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート