2016-09-25 98 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。

如果你没有发现异常,那么它是错的。