如何使用Java中的Scanner函数从控制台读取输入值?
Scanner 是 Java 标准包中的一个类,它提供了一种方便的方法来从标准输入或其他 InputStream 中读取输入值。使用 Scanner 类可以在 Java 中方便地从键盘或文件中读取输入值,并进行处理。本文将介绍如何使用 Scanner 类读取控制台输入值,包括使用不同的数据类型和处理异常情况。
一、Scanner 类的基本使用
在使用 Scanner 之前,需要先创建一个 Scanner 实例,来指定输入的来源。下面是一个简单的例子,演示了如何从控制台读取一个字符串:
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符串:");
String str = scanner.nextLine();
System.out.println("你输入的字符串是:" + str);
}
}
在上面的示例中,首先创建一个 Scanner 实例并将其指定为标准输入流 System.in。然后,使用 nextLine() 方法读取输入的字符串,并打印在控制台上。
若要使用 Scanner 读取其他类型的输入,只需调用相应的方法即可。下面是一些常用的 Scanner 方法:
1. nextLine():读取输入的一行字符串
2. next():读取输入的一个单词(以空格作为分隔符)
3. nextInt():读取输入的一个整数
4. nextDouble():读取输入的一个双精度浮点数
5. nextBoolean():读取输入的一个布尔值
例如,下面的示例演示了如何从控制台读取整数和浮点数:
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = scanner.nextInt();
System.out.println("你输入的整数是:" + num);
System.out.print("请输入一个浮点数:");
double d = scanner.nextDouble();
System.out.println("你输入的浮点数是:" + d);
}
}
二、Scanner 的异常处理
Scanner 可以读取多种类型的数据,但如果输入的数据类型和调用方法所要求的类型不符,就会抛出 InputMismatchException 异常。例如,在下面的示例中,当输入的字符串无法转换为整数时,就会抛出 InputMismatchException 异常:
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
try {
int num = scanner.nextInt();
System.out.println("你输入的整数是:" + num);
} catch (InputMismatchException e) {
System.out.println("请输入正确的整数!");
}
}
}
为了避免抛出异常,可以使用 hasNext() 方法判断是否还有下一个输入项,或使用 hasNextLine() 方法判断输入是否还有下一行。例如,下面的示例演示了如何判断输入是否为有效的整数:
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
if (scanner.hasNextInt()) {
int num = scanner.nextInt();
System.out.println("你输入的整数是:" + num);
} else {
System.out.println("请输入正确的整数!");
}
}
}
三、Scanner 的关闭和清除
在使用完 Scanner 后,需要调用 close() 方法来关闭 InputStream。如果没有正确关闭 InputStream,在某些情况下可能会导致内存泄漏或资源占用过多的问题。例如,下面的示例演示了如何关闭 Scanner:
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("请输入一个整数:");
int num = scanner.nextInt();
System.out.println("你输入的整数是:" + num);
} catch (InputMismatchException e) {
System.out.println("请输入正确的整数!");
} finally {
scanner.close();
}
}
}
此外,Scanner 还提供了一个 reset() 方法,可以清除 Scanner 的状态。例如,如果在读取输入时发生异常,在重新读取输入之前可以调用 reset() 方法来清除状态。下面的示例演示了如何使用 reset() 方法:
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = 0;
while (num == 0) {
try {
System.out.print("请输入一个整数:");
num = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("请输入正确的整数!");
scanner.reset();
scanner.next();
}
}
System.out.println("你输入的整数是:" + num);
scanner.close();
}
}
在上面的示例中,如果输入的不是整数,则清除 Scanner 的状态并调用 next() 方法来读取屏幕上剩余的输入值。这样就可以重新读取输入值。如果输入了正确的整数,则跳出循环并打印出输入值。
总结
在 Java 中,Scanner 是一种方便的方法来从标准输入或其他 InputStream 中读取输入值。使用 Scanner 类,我们可以方便地从键盘或文件中读取输入值,并进行处理。为了使用 Scanner 类,需要先创建一个 Scanner 实例,并将其指定为输入流。然后,使用相应的方法来读取不同类型的输入值。在读取输入时,需要注意处理异常情况和关闭输入流。
