2015-04-21 138 views
2

我想验证Java应用程序中的单个字符。 我不希望用户输入[a - p](忽略大写或小写)或numbers以外的字符。Java字符输入验证

Scanner input = new Scanner(System.in); 

System.out.print("Choose letter in range [a - p]"); 
letter = input.next().charAt(0); 

任何想法?

+0

改进的问题语法。 – dave

回答

1

可以使用regex过滤输入

在所述串的开始
.matches("^[a-pA-P0-9]*$") //this will not allow outside range of [a-p A-P] or numbers 

^断言位置

-创建具有adjascent一个字符范围令牌

a-pap之间的范围内的单个字符(区分大小写

A-P范围的一个字符AP之间(区分大小写

0-9单在0和9之间的字符范围

*重复前面的标识zeroinfinite次,多次尽可能

$断言位置在字符串

像这样的结尾:

Scanner input = new Scanner(System.in); 

    System.out.print("Choose letter in range [a - p]"); 
    letter = input.next().charAt(0); 

    if (Character.toString(letter).matches("^[a-pA-P0-9]*$")) { 
     System.out.println("valid input"); 
    }else{ 
     System.out.println("invalid input"); 
    } 

SEE REGEX DEMO

+0

非常感谢@ Dyrandz。有用。 – danielG

+0

我很高兴我帮助:) –

1

你可以用一个while循环将其封装检查,如果字母是在范围内或没有,只是不断要求用户输入一个字母

do { 
    System.out.print("Choose letter in range [a - p]"); letter = input.next().charAt(0); 
} while (letter is not in range of [a-p]); // pseudo code 
0

如果你不熟悉正则表达式,简单的输入检查可以照顾它。

 System.out.print("Choose letter in range [a - p]"); 
     String letter = input.nextLine(); 
     if (letter.length() == 1 && ('a' <= letter.charAt(0) && letter.charAt(0) <= 'p')) { 
      System.out.println(letter); 
     } else { 
      System.out.println("Invalid input"); 
     } 

我在这就是为什么我检查信=​​= 1信和长度落在我想要的范围的多个字符,意外闯入的情况下,使用nextLine(),否则它是无效的输入。