Java字符输入验证

时间:2015-04-21 00:54:48

标签: java validation

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

Scanner input = new Scanner(System.in);

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

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您可以使用regex过滤输入

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

^在字符串开头处断言位置

-使用adjascent标记创建一个字符范围

a-p ap之间的单个字符(区分大小写

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

答案 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并且字母落在我想要的范围内,否则它是输入无效。