我想验证java应用程序中的单个字符。
我不希望用户能够输入范围[a - p]
之外的字符(忽略大写或小写)或numbers
。
Scanner input = new Scanner(System.in);
System.out.print("Choose letter in range [a - p]");
letter = input.next().charAt(0);
有什么想法吗?
答案 0 :(得分:2)
您可以使用regex过滤输入
.matches("^[a-pA-P0-9]*$") //this will not allow outside range of [a-p A-P] or numbers
^
在字符串开头处断言位置
-
使用adjascent标记创建一个字符范围
a-p
a
和p
之间的单个字符(区分大小写)
A-P
A
和P
之间的单个字符(区分大小写)
0-9
0到9之间范围内的单个字符
*
重复上一个令牌zero
到infinite
次,尽可能多次
$
断言字符串末尾的位置
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");
}
答案 1 :(得分: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
答案 2 :(得分: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");
}
我在意外输入多个字符的情况下使用了nextLine(),这就是为什么我检查字母的长度== 1并且字母落在我想要的范围内,否则它是输入无效。