Java – 使用Scanner类读取类型安全输入

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 应用程序,在其中可以强制用户仅输入有效输入-而不会导致程序崩溃。

学习愉快!