1. 引言
Java中的Scanner
类是向控制台读取输入的有用工具。我们通常使用next()
或nextLine()
方法在每行上单独读取输入。然而,有时我们可能希望在同一行上读取多个输入。
在这个教程中,我们将探讨实现这一目标的不同方法,如使用空格或自定义分隔符,甚至正则表达式。
2. 同一行上读取多个输入
要在一个行上读取多个输入,我们可以使用Scanner
类以及next()
或nextLine()
方法。但我们需要使用分隔符来区分每个输入。
2.1. 使用空格作为分隔符
一种在同一行上读取多个输入的方法是使用空格作为分隔符。下面是一个例子:
Scanner scanner = new Scanner(System.in);
System.out.print("Enter two numbers: ");
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
System.out.println("You entered " + num1 + " and " + num2);
在这个例子中,我们使用nextInt()
方法从控制台读取两个整数。由于它们在同一行上,我们使用空格作为分隔符来分开两个整数。
2.2. 使用自定义分隔符
如果我们不想使用空格作为分隔符,可以通过调用Scanner
对象的setDelimiter()
方法来使用自定义分隔符。这里有一个例子:
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter(";");
System.out.print("Enter two numbers separated by a semicolon: ");
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
System.out.println("You entered " + num1 + " and " + num2);
在这个例子中,我们将分隔符设置为分号,而不是空格。我们还调用setDelimiter()
方法将分隔符设置为分号。
2.3. 使用正则表达式作为分隔符
除了使用空格或自定义分隔符,我们还可以在一行上读取多个由空格或逗号分隔的输入时,使用正则表达式作为分隔符。正则表达式是可以灵活、强大地匹配字符串的模式。
例如,如果我们想按照空格或逗号分隔读取多行输入,可以使用以下代码:
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("[\\s,]+");
System.out.print("Enter two numbers separated by a space or a comma: ");
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
System.out.println("You entered " + num1 + " and " + num2);
在这个例子中,我们使用正则表达式\s+
或,
作为分隔符。这个正则表达式匹配一个或多个空格或逗号。
3. 错误处理
在一行上读取多个输入时,重要的是要处理可能出现的错误,例如用户输入无效(如输入字符串而非整数)时抛出的异常。
为了处理这种错误,我们可以使用try-catch
块优雅地捕获并处理异常。下面是一个例子:
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter(";");
System.out.print("Enter two numbers separated by a semicolon: ");
try {
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
System.out.println("You entered " + num1 + " and " + num2);
} catch (InputMismatchException e) {
System.out.println("Invalid input. Please enter two integers separated by a semicolon.");
}
在这个例子中,我们使用try-catch
块来捕获可能因用户输入无效(如InputMismatchException
)而抛出的异常。如果捕获到这个异常,我们会打印错误消息并要求用户重新输入。
4. 总结
在这篇文章中,我们讨论了如何使用Scanner
类在同一行上读取多个输入。
完整的示例代码可以在GitHub上查看。