我是从记录用户输入System.in使用java.util.Scanner。我需要验证输入内容,例如:
System.in
java.util.Scanner
必须为非负数 它必须是字母 …等等
最好的方法是什么?
这是一个hasNextInt()用于int从输入中验证肯定的简单示例。
hasNextInt()
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。
Scanner.hasNextInt()
try/catch Integer.parseInt/ NumberFormatException
Scanner
nextInt()
NumberFormatException/ InputMismatchException/ NoSuchElementException
hasNextXXX
请注意,上面的代码段包含一个sc.next()语句,以使Scanner直到它前进hasNextInt()。重要的是要意识到,没有一种 hasNextXXX 方法可以 Scanner 超越任何输入!你会发现,如果你从代码段中省略了这一行,那么它将在无效输入上陷入无限循环!
sc.next()
这有两个结果:
如果你需要跳过“垃圾”输入失败的hasNextXXX测试,那么你需要提前Scanner一个这样或那样的(例如next(),nextLine(),skip等)。 如果一项hasNextXXX测试失败,你仍然可以进行测试hasNextYYY! 这是执行多个hasNextXXX测试的示例。
next()
nextLine()
hasNextYYY
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是相反的方式。通常,你想在进行更通用的测试之前先进行更具体的测试。
Scanner hasNextInt()
hasNextLong()
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