¿Por qué "3.5".matches("[0-9]+") devuelve falso?

Yo uso el método String.matches(String regex) para encontrar si una cadena coincide con la expresión regular

Desde mi punto de vista la expresión regular regex="[0-9]+" significa una cadena que contiene al menos una cifra entre 0 y 9

Pero cuando depuro "3.5".matches("[0-9]+") devuelve falso.

Entonces, ¿qué está mal?

preguntado el 27 de julio de 12 a las 17:07

3 Respuestas

matches determina si la expresión regular coincide con la todo cuerda. no regresará true si la cuerda contiene un partido.

Para probar si la cadena contiene una coincidencia con una expresión regular dada, use Pattern.compile(regex).matcher(string).find().

(Tu expresión regular, [0-9]+, coincidirá con cualquier cadena que contenga solo dígitos del 0 al 9 y al menos un dígito. No coincide mágicamente con ningún número real. Si quiere algo que coincida con cualquier número real, mire, por ejemplo, el Javadoc para Double.valueOf(String), que especifica una expresión regular utilizada en la validación de dobles. Esa expresión regular permite la entrada hexadecimal, NaN e infinitos, pero debería darle una mejor idea de lo que se requiere).

Alternativamente, edite la expresión regular para que coincida directamente con cualquier cadena que contenga uno o más dígitos, por ejemplo .*[0-9]+.* haría el trabajo.

Respondido 27 Jul 12, 17:07

.*[0-9]+.* coincide con cualquier cadena con un # en ella, pero no creo que eso sea lo que está buscando el OP. Parece que estaba confundido al pensar que su expresión regular coincidiría numéricamente en lugar de como una cadena. .*[0-9]+.* cerillas 3.5 claro, pero también coincide a1b. ¿Tiene la mejor explicación pero tal vez incorpore la expresión regular de la respuesta de RoddyoftheFrozenPea? +1 con actualización - viento

Si desea hacer coincidir números decimales, su reg ex debe ser \d*\.?\d+. Si también quieres negativos, entonces \-?\d*\.?\d+.

Respondido 27 Jul 12, 17:07

. no está 0-9 y matches prueba toda la cadena.

Respondido 27 Jul 12, 17:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.