2016-09-25 2 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.matches и regular 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

Вы можете использовать рег ей

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

    } 

Здесь \ d {8} = восемь цифр \ ш {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

ввод.(«\\ d {8} [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) в блоке catch try, захватывающем NUmberFormatException.

Если вы не поймаете исключения, все в порядке, иначе это неправильно.

Смежные вопросы