2012-07-24 21 views
5

Ich bin Neuling regulären Ausdruck Java. Ich schrieb folgenden Code für die Validierung der Nicht-Ziffer. Wenn wir eine beliebige Zahl eingeben, sollte sie false zurückgeben. Für mich gibt der folgende Code immer false zurück. Was ist hier falsch?java regulärer Ausdruck Rückkehr falsch

Paket RegulaererAusdruck;

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

Sie wirklich eine Klasse dafür braucht ??? '" 123 ".matches (" \\ d + ")' wäre nicht genug? – elias

+0

Yaa .. Es ist wahr ... selbst mit dieser Linie funktioniert es. Danke für die Vereinfachung des Codes. – user414967

Antwort

10

Von Java Dokumentation:

Die Spiele-Methode versucht, die gesamte Eingangssequenz mit dem Muster übereinstimmen.

Ihr regulärer Ausdruck entspricht einer einzelnen Ziffer, nicht einer Zahl. In + nach \\d matchone oder mehr Ziffern:

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

Als Randbemerkung, Sie Initialisierung und Erklärung Muster kombinieren kann, so dass der Konstruktor nicht notwendig:

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

Das erklärt nicht, warum das Ergebnis "falsch" ist. '" \\ d "' passt '" 123 "' auch. (Auch wenn das Muster * nur * Ziffern entsprechen sollte, sollte es '"^\ d + $ "' sein.) – Tomalak

+1

@Tomalak Danke für die Notiz - Ich habe eine Erklärung hinzugefügt. – dasblinkenlight

+0

Ah, ich verstehe, warum '^' und '$' hier unnötig sind. Vielen Dank. – Tomalak

2

matches „gibt true zurück, wenn und nur wenn die gesamte Region-Sequenz mit dem Muster dieses Matcher übereinstimmt. "

Der String ist 3 Ziffern, die nicht dem Muster \d überein, ‚eine Ziffer‘ bedeutet.

Stattdessen wollen Sie das Muster \d+, was ‚eine oder mehr Ziffern.‘ Dies wird in einem String als "\\d+" ausgedrückt