如何使用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