2017-12-06 1 views
0

java.util.regex.Patternを使用して簡単なJavaアプリケーションに入力検証を適用したいとします。パターンマッチングを追加する前に、私は期待通りに私の配列にユーザー入力を得ることができましたが、パターンマッチングを使ってこれを行う方法を理解することはできません。Regex.Patternと配列を使用してScannerを使用してJavaで入力検証を行う方法

この行は問題があるようです:in.nextLine();パターンマッチングでwhileステートメントを追加したので、間違った場所にありますか?

ここに私の小さなアプリのコードの関連する塊です。

//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

パターンは必要ありません。単に.matches()メソッドを使用してください。 – prsvr

答えて

2

in.nextLine()が正しい(且つnextInt()を呼び出すから改行を消費)。問題はあなたのループです。

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

tempNameを更新せずに使用すると、ループ本体に入る場合は条件があなたのメッセージを印刷した後、常に真であるので、あなたが離れることはありません。

関連する問題