Java の「String.matches()」が小文字の単語を見つけられないのはなぜですか?

Susan Sarandon
リリース: 2024-11-25 17:56:11
オリジナル
804 人が閲覧しました

Why Does Java's `String.matches()` Fail to Find Lowercase Words?

正規表現パズル: String.matches() が誤動作するのはなぜですか?

次のコード スニペットの目的は、正規表現を使用して次のことを行うことです。小文字のみを含む単語を識別します:

String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
    if(s.matches("[a-z]"))
    {
        System.out.println(s);
    }
}
ログイン後にコピー

ただし、印刷する代わりに「dkoe」は予期された結果ですが、コードは出力を生成しません。なぜこのようなことが起こるのでしょうか?

String.matches() の落とし穴

原因は String.matches() メソッドの誤解にあります。他の言語の一見類似したものとは異なり、Java のmatches() は、入力文字列全体を指定された正規表現と照合しようとします。これは、式が文字列の一部だけではなく文字列全体と一致する必要があることを意味します。

指定されたコードでは、正規表現 [a-z] は任意の小文字 1 文字と一致します。したがって、matches() が true を返すには、入力文字列全体がちょうど 1 つの小文字で構成されている必要があります。ただし、どの入力単語もこの条件を満たしていません。

解決策: Pattern と Matcher の導入

この問題を解決するには、Pattern オブジェクトと Matcher オブジェクトを使用することをお勧めします。これにより、正規表現一致の制御と柔軟性が向上します。

Pattern p = Pattern.compile("[a-z]+");
Matcher m = p.matcher(inputstring);
if (m.find())
    // match found
ログイン後にコピー

文字クラス内で量指定子を使用することで、次のことが保証されます。この式は 1 つ以上の小文字を含む文字列と一致し、単語「dkoe」を正しく識別します。

以上がJava の「String.matches()」が小文字の単語を見つけられないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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