2011-07-01 16 views
1

これはjavaを開始するための処理です。 私の目標はVin番号を取り込んで文字列に格納することです。 9文字以下であることを確認してください。また、Vin番号は、数字とアルファベットa〜zまたはA〜Zのみを含むことになっています。ユーザーが無効なVin番号を入力すると、ループバックして新しいVin番号を入力する必要があります。私の問題は、文字列に整数や文字以外のものが含まれているかどうかを伝えることです。私はUtility.IsAlphaNumericメソッドを見てきましたが、実装方法やJavaメソッドであるかどうかはわかりません。 NetBeansは、私がそれを使用しようとするたびにエラーを出します。整数または文字以外の文字列をチェックするa - z

private static String checkVin() { 
    Scanner input = new Scanner(System.in); 
    String vinNumber = ""; 
    do { 
     System.out.println("Please enter the vin number of the car"); 
     vinNumber = input.next(); 
     if (vinNumber.length() > 9) { 
      System.out.println("invalid input for Vin number"); 
     } 
     for (int i = 0; i < vinNumber.length(); i++) { 
      char currentCharacter = vinNumber.charAt(i); 

      if ((currentCharacter < '0' || currentCharacter > '9') 
        || !(currentCharacter < 'a' || currentCharacter > 'z') 
        || !(currentCharacter > 'A' || currentCharacter > 'Z')); 
      System.out.println("invalid input for Vin Number"); 
      break; 
     } 
     return vinNumber; 

    } while (true); 
} 

答えて

10

Utilityは、コアライブラリのクラス名ではありません。

あなたは最高のメカニズムは、それが特定のパターンに一致することを確認するために正規表現を使用することです

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

private static final Pattern VALID_VIN_NUMBER = Pattern.compile(
    "[0-9a-zA-Z]{1,9}"); 

public static boolean isVin(String s) { 
    return VALID_VIN_NUMBER.matcher(s).matches(); 
} 
0

で全体のチェックループを置き換えることができます。試してください:

vin != null && vin.matches([a-zA-Z0-9]{9})) 

これは、vin文字列が9文字の文字列で、英数字のみであることを確認します。

1

長い答えのための時間を持っていないが、

Pattern p = Pattern.compile("^[A-Za-z0-9]{0,9}$"); 
boolean matches = p.matcher(s).matches(); 

これは

  • 文字列の開始(^)
  • 「任意の数字または文字、小文字を探すために、それを言っていますまたは大文字」([A-ZA-Z0-9])
  • "それらの0~9"({0,9})
  • 文字列を終了する($)
関連する問題