示例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!fiveThat's not a number!-3Please enter a positive number!5Thank 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) 5false(boolean) falseblah(String) blah1.1(double) 1.1100000000000(long) 100000000000exit
请注意,测试顺序很重要。如果是
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!5That's not a vowel!zThat's not a vowel!eThank you! Got e



