Regex no funciona en String.matches()

Resuelto John Eipe asked hace 12 años • 9 respuestas

Tengo este pequeño fragmento de código.

String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
    if(s.matches("[a-z]"))
    {
        System.out.println(s);
    }
}

Se supone que debe imprimir

dkoe

pero no imprime nada!!

John Eipe avatar Jan 19 '12 16:01 John Eipe
Aceptado

Bienvenido al método mal llamado de Java .matches()... Intenta y hace coincidir TODA la entrada. Desafortunadamente, otros idiomas han seguido su ejemplo :(

Si desea ver si la expresión regular coincide con un texto de entrada, use a Pattern, a Matchery el .find()método del comparador:

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

Si lo que quieres es ver si una entrada solo tiene letras minúsculas, puedes usar .matches(), pero necesitas hacer coincidir uno o más caracteres: agrega a +a tu clase de caracteres, como en [a-z]+. O usar ^[a-z]+$y .find().

fge avatar Jan 19 '2012 09:01 fge

[a-z]coincide con un solo carácter entre a y z. Entonces, si su cadena fuera solo "d", por ejemplo, entonces habría coincidido y se habría impreso.

Debe cambiar su expresión regular para [a-z]+que coincida con uno o más caracteres.

dogbane avatar Jan 19 '2012 09:01 dogbane