Skip to content

Regex doesn’t work in String.matches()

I have this small piece of code

String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)

Supposed to print


but it prints nothing!!


Welcome to Java’s misnamed .matches() method… It tries and matches ALL the input. Unfortunately, other languages have followed suit 🙁

If you want to see if the regex matches an input text, use a Pattern, a Matcher and the .find() method of the matcher:

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

If what you want is indeed to see if an input only has lowercase letters, you can use .matches(), but you need to match one or more characters: append a + to your character class, as in [a-z]+. Or use ^[a-z]+$ and .find().