2017-12-06 1 views
0

bekommen Ich möchte einige Eingabe-Validierung auf eine einfache Java-Anwendung mit java.util.regex.Pattern anwenden. Vor dem Hinzufügen des Mustervergleichs konnte ich wie erwartet Eingaben von Benutzern in meine Arrays erhalten, aber ich kann nicht herausfinden, wie dies mit dem Mustervergleich geschehen soll.Wie kann ich Input-Validierung mit Java mit Scanner mit regex.Pattern und Arrays

Diese Zeilen scheint problematisch zu sein: in.nextLine(); Ist es jetzt an der falschen Stelle, dass ich die while-Anweisung mit dem Mustervergleich hinzugefügt habe?

Hier ist der relevante Code aus meiner kleinen App.

//These variables used during input validation 
     String tempName; 
     int tempGrade; 

     //These regex patterns are for input validation 
     //Names can be 1-15 letters and grades are 2 digits 
     Pattern namePattern = Pattern.compile("[A-Za-z]{1,15}"); 
     Pattern gradePattern = Pattern.compile("[0-9]{2,2}"); 

     //Parallel arrays to hold last names and grades 
     String[] names = new String[5]; 
     int[] grades = new int[5]; 


     Scanner in = new Scanner(System.in); 
     try { 


      for(int i = 0; i<5; i++) { 
       System.out.println("Enter a name:"); 
       tempName = in.nextLine(); 
       System.out.println("Enter a grade:"); 
       tempGrade = in.nextInt(); 
       in.nextLine(); 
       while(!namePattern.matcher(tempName).matches()) { 
        System.out.println("Bad input. Try again");     
       } 
       names[i] = tempName; 
       grades[i] = tempGrade; 
       } 
+0

Sie brauchen kein Muster, verwenden Sie einfach .matches() -Methode. – prsvr

Antwort

2

Nr in.nextLine() korrekt ist (und verbraucht die Hinter Newline nextInt() von Aufruf). Das Problem ist deine Schleife.

while(!namePattern.matcher(tempName).matches()) { 
    System.out.println("Bad input. Try again");  
    tempName = in.nextLine(); //<-- add this.    
} 

Ohne tempName zu aktualisieren, wenn Sie die Schleife Körper gelangen Sie nie verlassen, weil die Bedingung nach dem Drucken Sie Ihre Nachricht immer wahr ist.