如何使用java.util.Scanner验证输入?

我是从记录用户输入System.in使用java.util.Scanner。我需要验证输入内容,例如:

必须为非负数

它必须是字母

…等等

最好的方法是什么?

回答:

示例1:验证正整数

这是一个hasNextInt()用于int从输入中验证肯定的简单示例。

Scanner sc = new Scanner(System.in);

int number;

do {

System.out.println("Please enter a positive number!");

while (!sc.hasNextInt()) {

System.out.println("That's not a number!");

sc.next(); // this is important!

}

number = sc.nextInt();

} while (number <= 0);

System.out.println("Thank you! Got " + number);

结果:

Please enter a positive number!

five

That's not a number!

-3

Please enter a positive number!

5

Thank you! Got 5

请注意Scanner.hasNextInt(),与更详细try/catch Integer.parseInt/ NumberFormatException组合相比,使用起来要容易得多。通过合同,一个Scanner 保证,如果它hasNextInt(),然后nextInt()将安静地给你int,并不会引发任何NumberFormatException/ InputMismatchException/ NoSuchElementException

示例2:hasNextXXX同一令牌上有多个

请注意,上面的代码段包含一个sc.next()语句,以使Scanner直到它前进hasNextInt()。重要的是要意识到,没有一种 hasNextXXX 方法可以 Scanner 超越任何输入!你会发现,如果你从代码段中省略了这一行,那么它将在无效输入上陷入无限循环!

这有两个结果:

如果你需要跳过“垃圾”输入失败的hasNextXXX测试,那么你需要提前Scanner一个这样或那样的(例如next()nextLine(),skip等)。

如果一项hasNextXXX测试失败,你仍然可以进行测试hasNextYYY

这是执行多个hasNextXXX测试的示例。

Scanner sc = new Scanner(System.in);

while (!sc.hasNext("exit")) {

System.out.println(

sc.hasNextInt() ? "(int) " + sc.nextInt() :

sc.hasNextLong() ? "(long) " + sc.nextLong() :

sc.hasNextDouble() ? "(double) " + sc.nextDouble() :

sc.hasNextBoolean() ? "(boolean) " + sc.nextBoolean() :

"(String) " + sc.next()

);

}

输出结果:

5

(int) 5

false

(boolean) false

blah

(String) blah

1.1

(double) 1.1

100000000000

(long) 100000000000

exit

请注意,测试顺序很重要。如果是Scanner hasNextInt(),那么它也是hasNextLong(),但不一定true是相反的方式。通常,你想在进行更通用的测试之前先进行更具体的测试。

示例3:验证元音

Scanner具有正则表达式支持的许多高级功能。这是一个使用它来验证元音的示例。

Scanner sc = new Scanner(System.in);

System.out.println("Please enter a vowel, lowercase!");

while (!sc.hasNext("[aeiou]")) {

System.out.println("That's not a vowel!");

sc.next();

}

String vowel = sc.next();

System.out.println("Thank you! Got " + vowel);

输出结果:

Please enter a vowel, lowercase!

5

That's not a vowel!

z

That's not a vowel!

e

Thank you! Got e

以上是 如何使用java.util.Scanner验证输入? 的全部内容, 来源链接: utcz.com/qa/423013.html

回到顶部