首頁 >Java >java教程 >為什麼 Java 的 `String.matches()` 找不到小寫單字?

為什麼 Java 的 `String.matches()` 找不到小寫單字?

Susan Sarandon
Susan Sarandon原創
2024-11-25 17:56:11838瀏覽

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] 符合任何單一小寫字母。因此,要使 matches() 傳回 true,整個輸入字串必須只包含一個小寫字元。然而,沒有一個輸入單字滿足這個條件。

解決方案:引入 Pattern 和 Matcher

要解決這個問題,建議使用 Pattern 和 Matcher對象,它在正則表達式匹配中提供了更多的控制和靈活性:

Pattern p = Pattern.compile("[a-z]+");
Matcher m = p.matcher(inputstring);
if (m.find())
    // match found

通過在字符類中使用量詞,我們確保表達式匹配包含一個或多個小寫字符的字符串,這將正確識別單字“dkoe”。

以上是為什麼 Java 的 `String.matches()` 找不到小寫單字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn