2016-09-25 96 views
0

我試圖檢查輸入字符串: - 長 - 型 - 特殊字符在年底的Java檢查字符串輸入

輸入一個身份證這樣24659213Q。

那麼我現在是:

public void datosUsuario() { 
    System.out.print("Write ID: "); 
    input = scanner.nextLine(); 
} 


//ID check 
public void comprobacion() { 
    System.out.println("Checking ID length..."); 
    if (input.length() == 9){ 
     status = true; 
     System.out.println("Length: OK!"); 
    } else { 
     System.out.println("Length not OK! Try again!\n"); 
     status = false; 
    } 
} 

所以我檢查了整個字符串具有8 + 1的長度,現在我有檢查,如果它在8點月末的數字和字符的問題的輸入。

任何想法都會被貶低!謝謝!

回答

3

我會使用一個正則表達式:

String input = scanner.nextLine(); 
input.matches("/^[0-9]{8}[A-Za-z]$/); 

String.matchesregular expression文檔。

+0

它可以適應,以便最後一個字母字符匹配像下一個字符列表:'static final char [] LETTER = {'T','R','W','A','G', 'M','Y','F','P','D','X','B','N','J','Z','S','Q','V ','H','L','C','K','E'};' –

+0

當然。將'[A-Za-z]'更改爲'[TRWAGMYFPDXBNJZSQVHLCKE]',並讀取正則表達式字符類。 –

+0

這有效,但它要求我從我的java文件開始定義的靜態常量來檢查它。那麼像這樣的工作? 'input.matches(「/^[0-9] {8} + indexOf(LETTER)$ /」);' –

1

一個簡單的方法是:

//ID check 
public void comprobacion() { 
System.out.println("Checking ID length..."); 
if (input.length() == 9) { 
    if (Character.isAlphabetic(input.charAt(8)) { 
     status = true; 
     System.out.println("OK!"); 
    } else { 
     status = false; 
     System.out.println("Length: OK, but last character must be alphabetic"); 
    } 
} else { 
    System.out.println("Length not OK! Try again!\n"); 
    status = false; 
} 
0

你可以使用「Character.isDigit()」,以確定是否一個字符是數字或沒有。換句話說,你可以創建一個for循環來遍歷每個字符,檢查它是否是一個數字。下面是一個例子:

String input = "24659213Q"; 
for(int c = 0; c < input.length()-1; c++){ 
    //Checks all but the last character 
    if(!Character.isDigit(input.charAt(c))){ 
     System.out.println("The String does not start with 8 digits"); 
    } 
} 
if(Character.isDigit(input.charAt(8))){ 
    //Checks only last character 
    System.out.println("The String does not end with a char"); 
} 
1

可以使用REG的前,

public static void comprobacion(String input) { 
    status = false; 
    if(input.matches("\\d{8}\\w{1}")) 
    { 
     status = true; 
    } 

    } 

這裏,\ d {8} =八位 \ W {1} =一個字母字符

+0

它可以適應,以便最後一個字母字符匹配char列表如下: static final char [] LETTER = {'T','R','W','A','G','M','Y','F','P' ,'D','X' ,'B','N','J','Z','S','Q','V','H','L','C' ,'K','E'}; –

+0

輸入。(T,R,W,A,G,M,Y,F,P,D,X,B,N,J,Z,S,Q,V,H,L, C,K,E] {1}「) 這應該起作用。 – JTeam

0

的方法如上所述也可以遵循正則表達式。還有一種方法可以做到這一點。

1)將字符串拆分爲兩部分,一部分包含8個字符,另一部分包含最後一個字符。

2)解析第一個字符串中的第一個字符串 Integer.parseInt(subStringOfFirst8Char)在一個try catch catch塊中捕獲NUMBFormatException。

如果你沒有發現異常,那麼它是錯的。