2011-07-01 22 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})
  • 字符串結束($)
相關問題