一、输入输出方式:Scanner vs BufferedReader
Scanner类
- 简介:Scanner 是 Java 中一个非常方便的用于读取用户输入的类,它可以从多种输入源(如标准输入、文件等)读取基本数据类型和字符串。
1. Scanner的细节与使用场景
适用场景:小规模输入、简单测试、需要快速开发的场景。
核心方法:
nextInt():读取整数(以空格/回车分隔)。
nextDouble():读取双精度浮点数。
nextLine():读取整行(可能因前序输入残留换行符导致问题)。
陷阱示例:
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(); // 输入后按回车
String s = sc.nextLine(); // 这里会读取到残留的换行符,导致s为空!
解决方法:在nextInt()后添加sc.nextLine()清空缓冲区。
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取整数
int num = scanner.nextInt();
// 读取字符串
String str = scanner.nextLine();
System.out.println("输入的整数是: " + num);
System.out.println("输入的字符串是: " + str);
scanner.close();
}
}
- 优点:使用简单,提供了丰富的方法来读取不同类型的数据,如 nextInt()、nextDouble()、nextLine() 等。
- 缺点:读取效率相对较低,尤其是在处理大量输入时。
BufferedReader类
- 简介:BufferedReader 是一个字符缓冲输入流,它可以高效地读取字符数据。通常与 InputStreamReader 结合使用,将字节流转换为字符流。
- 使用示例:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BufferedReaderExample {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 读取一行字符串
String line = reader.readLine();
// 将字符串转换为整数
int num = Integer.parseInt(line);
System.out.println("输入的整数是: " + num);
reader.close();
}
}
- 优点:读取效率高,适合处理大量输入。
- 缺点:使用相对复杂,需要手动处理异常,且只能读取字符串,需要手动进行数据类型转换。
BufferedRea