Java使用扫描程序时如何验证输入?

此示例显示了使用时如何验证输入java.util.Scanner。为了验证输入,Scanner该类提供了一些hasNextXXX()可用于验证输入的方法。例如,如果我们要检查输入是否为有效整数,可以使用该hasNextInt()方法。

在下面的代码片段中,将演示如何验证用户是否提供正整数。程序将重复执行,直到提供正确的输入为止。

package org.nhooo.example.util;

import java.util.Scanner;

public class ScannerValidateInput {
    public static void main(String[] args) {
        ScannerValidateInput demo = new ScannerValidateInput();
        demo.validatePositiveNumber();
    }

    private void validatePositiveNumber() {
        Scanner scanner = new Scanner(System.in);

        int number;
        do {
            System.out.print("Please enter a positive number: ");
            while (!scanner.hasNextInt()) {
                String input = scanner.next();
                System.out.printf("\"%s\" is not a valid number.\n", input);
            }
            number = scanner.nextInt();
        } while (number < 0);

        System.out.printf("You have entered a positive number %d.\n", number);
    }
}

代码段产生的输出:

Please enter a positive number: qwerty
"qwerty" is not a valid number.
@@@
"@@@" is not a valid number.
-100
Please enter a positive number: 99
You have entered a positive number 99.

另一个示例是验证用户是否正确输入了字母来邀请一个秘密单词。在下面的代码段中,如果用户未输入字母,则该代码将继续要求输入有效的字母。循环直到输入字母的长度等于秘密单词的长度。

private void validateLetter() {
    String secretWord = "Hello";
    Scanner scanner = new Scanner(System.in);

    int length = 0;
    StringBuilder guess = new StringBuilder();
    do {
        System.out.print("Enter a letter to guess: ");
        char letter = scanner.next().charAt(0);
        if (Character.isLetter(letter)) {
            guess.append(letter);
            length++;
        }
    } while (length < secretWord.length());

    if (secretWord.equalsIgnoreCase(guess.toString())) {
        System.out.println("You are correct!");
    } else {
        System.out.println("Please try again!");
    }
}
Enter a letter to guess: 1
Enter a letter to guess: 2
Enter a letter to guess: H
Enter a letter to guess: e
Enter a letter to guess: l
Enter a letter to guess: l
Enter a letter to guess: o
You are correct!