Java – 使用Scanner
类读取类型安全输入
原文: https://howtodoinjava.com/java/io/read-typesafe-input-scanner-class/
学习在任何交互式 Java 应用程序中从控制台读取类型安全用户输入,即提示用户直到用户以正确的格式/数据类型输入值。
Table of Contents
Type unsafe way of reading input [Not recommended]
Typesafe way of reading input from console using Scanner [Recommended]
读取输入内容的不安全方式
是否曾尝试使用Scanner
类在基于交互式控制台的程序中读取用户的输入? 这是非常简单的代码。 您问用户一个问题,用户输入值,然后按Enter
。 然后,您可以使用Scanner.nextXYZ()
方法读取该值。
我们来看一个使用Scanner
类从控制台读取输入的示例。
private static void typeUnsafeReadExample() {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your age as an integer > ");
int age = scanner.nextInt();
System.out.println("Your age is " + age);
scanner.close();
}
//Output - 1
Enter your age as an integer > 10
Your age is 10
//Output - 2
Enter your age as an integer > ten
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at com.howtodoinjava.examples.TypeSafeInputExample.typeUnsafeReadExample(TypeSafeInputExample.java:19)
at com.howtodoinjava.examples.TypeSafeInputExample.main(TypeSafeInputExample.java:9)
用户根据自己的理解键入正确的输入时,由于InputMismatchException
异常而使应用程序崩溃。
让我们解决这个用例。
使用扫描器从控制台读取输入的类型安全方式
从理论上讲,我们可以在阅读之前检查下一个标记是否与我们的预期输入匹配,从而使程序更强大。 Scanner.hasNextXYZ()
方法可以执行确切的操作,这是我们需要的。 如果可以将下一个标记读取为请求的数据类型,则返回true
。
例如,如果我们期望整数值,则仅当扫描器中的下一个可用标记可以解析为整数值时,调用Scanner.hasNextInt()
才会返回true
。 否则它将返回false
,我们可以通知用户输入的值无效,并重新提示输入新值。
让我们来看看以上使用代码的解决方案。
private static void typeSafeReadExample()
{
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your age > ");
while (!scanner.hasNextInt())
{
scanner.nextLine(); //clear the invalid input before prompting again
System.out.print("Please enter your age in natural positive number > ");
}
int age = scanner.nextInt();
System.out.println("Your age is " + age);
scanner.close();
}
//Output:
Enter your age > ten
Please enter your age in natural positive number > 10.5
Please enter your age in natural positive number > 10
Your age is 10
使用Scanner.hasNextXYZ()
和Scanner.nextXYZ()
方法,我们可以编写任何基于控制台的交互式 Java 应用程序,在其中可以强制用户仅输入有效输入-而不会导致程序崩溃。
学习愉快!