企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Java – 使用`Scanner`类读取类型安全输入 > 原文: [https://howtodoinjava.com/java/io/read-typesafe-input-scanner-class/](https://howtodoinjava.com/java/io/read-typesafe-input-scanner-class/) 学习在任何交互式 Java 应用程序中从控制台读取类型安全用户输入,即提示用户直到用户以正确的格式/数据类型输入值。 ```java Table of Contents Type unsafe way of reading input [Not recommended] Typesafe way of reading input from console using Scanner [Recommended] ``` ## 读取输入内容的不安全方式 是否曾尝试使用`Scanner`类在基于[交互式控制台的程序](https://howtodoinjava.com/java/io/java-io-how-to-read-input-from-console/)中读取用户的输入? 这是非常简单的代码。 您问用户一个问题,用户输入值,然后按`Enter`。 然后,您可以使用`Scanner.nextXYZ()`方法读取该值。 我们来看一个使用`Scanner`类从控制台读取输入的示例。 ```java 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`,我们可以通知用户输入的值无效,并重新提示输入新值。 让我们来看看以上使用代码的解决方案。 ```java 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()`](https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html)和`Scanner.nextXYZ()`方法,我们可以编写任何基于控制台的交互式 Java 应用程序,在其中可以强制用户仅输入有效输入-而不会导致程序崩溃。 学习愉快!