Understanding the Discrepancy in String.matches()
When attempting to validate strings using regular expressions in Java, you may encounter an unexpected behavior with the String.matches() method. While the intention of this method implies matching a substring within a string, it actually attempts to match the entire string against the provided regular expression.
Consider the following code snippet:
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[a-z]")) { System.out.println(s); } }
As you've noticed, this code fails to print the expected output ("dkoe") because it is not matching the desired substring but rather checking if the entire string contains only lowercase letters.
The Solution: Using Pattern and Matcher
To resolve this issue, you should use the Pattern and Matcher classes along with the .find() method to determine if a regular expression matches any substring within the input text. This approach involves the following steps:
Here's an example:
Pattern p = Pattern.compile("[a-z]"); Matcher m = p.matcher(inputstring); if (m.find()) // match found
If you want to ensure that the input only contains lowercase letters, you can use the following regular expression: ^[a-z] $. Don't forget to use .find() instead of .matches().
The above is the detailed content of Why Does Java\'s `String.matches()` Fail to Match Substrings, and How Can I Correctly Match Substrings Using Regular Expressions?. For more information, please follow other related articles on the PHP Chinese website!