正規表示式謎題:為什麼 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中文網其他相關文章!