2012-07-24 23 views
5

Soy un novato en la expresión regular de java. Escribí el siguiente código para validar el número sin dígitos. Si ingresamos un número que no sea un dígito, debe devolver falso. para mí el código a continuación siempre devuelve falso. ¿Cuál es el error aquí?expresión regular de java que devuelve falso

paquete regularexpression;

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class NumberValidator { 

    private static final String NUMBER_PATTERN = "\\d"; 
    Pattern pattern; 

    public NumberValidator() { 
     pattern = Pattern.compile(NUMBER_PATTERN); 
    } 

    public boolean validate(String line){ 
     Matcher matcher = pattern.matcher(line); 
     return matcher.matches(); 
    } 

    public static void main(String[] args) { 

     NumberValidator validator = new NumberValidator(); 

     boolean validate = validator.validate("123"); 

     System.out.println("validate:: "+validate); 
    } 

} 
+0

¿Realmente necesitas una clase para eso? '" 123 ".matches (" \\ d + ")' no sería suficiente? – elias

+0

Yaa .. Es verdad ... incluso con esa línea funciona. Gracias por simplificar el código. – user414967

Respuesta

10

De la documentación de Java:

El método partidos intenta hacer coincidir toda la secuencia de entrada contra el patrón.

Su expresión regular coincide con un solo dígito, no un número. Añadir + después \\d a matchone o más dígitos:

private static final String NUMBER_PATTERN = "\\d+"; 

Como nota al margen, puede combinar la inicialización y la declaración de patrón, por lo que el constructor innecesaria:

Pattern pattern = Pattern.compile(NUMBER_PATTERN); 
+0

Eso no explica por qué el resultado es 'falso'. '" \\ d "' coincide con '" 123 "', también. (Además, si el patrón debe * solo * hacer coincidir los dígitos, debería ser '"^\\ d + $ "'.) – Tomalak

+1

@Tomalak Gracias por la nota. He añadido una explicación. – dasblinkenlight

+0

Ah, veo por qué '^' y '$' son innecesarios aquí. Gracias. – Tomalak

2

matches "devuelve verdadero si, y solo si la secuencia completa de la región coincide con el patrón de este emparejador ".

La cadena tiene 3 dígitos, lo que no coincide con el patrón \d, que significa 'un dígito'.

En su lugar, desea el patrón \d+, que significa 'uno o más dígitos'. Esto se expresa en una cadena como "\\d+"

Cuestiones relacionadas