使用 Scanner
类(推荐初学者)
Scanner
是 java.util
包中的工具类,提供简单的文本解析功能,适合基础输入操作。
完整示例代码
import java.util.Scanner; public class ScannerExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 创建Scanner对象 System.out.print("请输入整数:"); int numberInt = scanner.nextInt(); // 直接读取整数 System.out.print("请输入小数:"); double numberDouble = scanner.nextDouble(); // 直接读取小数 System.out.println("整数:" + numberInt); System.out.println("小数:" + numberDouble); scanner.close(); // 关闭资源防止内存泄漏 } }
关键注意事项
-
输入验证:
使用hasNextInt()
或hasNextDouble()
避免无效输入导致的崩溃:System.out.print("请输入整数:"); while (!scanner.hasNextInt()) { System.out.println("错误!请重新输入整数:"); scanner.next(); // 清除错误输入 } int safeNumber = scanner.nextInt();
-
资源释放:
务必调用scanner.close()
释放系统资源(如从文件读取时)。 -
数据类型匹配:
nextInt()
→ 整数nextDouble()
→ 双精度小数nextFloat()
→ 单精度小数
使用 BufferedReader
+ InputStreamReader
(高性能场景)
适用于需要高效读取大量输入的场景(如文件/网络流),需手动转换数据类型。
完整示例代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BufferedReaderExample { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("请输入整数:"); int numberInt = Integer.parseInt(reader.readLine()); // 字符串转整数 System.out.print("请输入小数:"); double numberDouble = Double.parseDouble(reader.readLine()); // 字符串转小数 System.out.println("整数:" + numberInt); System.out.println("小数:" + numberDouble); } catch (IOException e) { System.err.println("输入输出错误:" + e.getMessage()); } catch (NumberFormatException e) { System.err.println("格式错误:必须输入数字!"); } finally { try { reader.close(); // 确保资源关闭 } catch (IOException e) { System.err.println("关闭资源失败:" + e.getMessage()); } } } }
关键优势与风险控制
-
异常处理:
IOException
:处理输入流错误NumberFormatException
:捕获非数字输入
-
性能优势:
BufferedReader
的缓冲机制减少I/O操作次数,适合高频输入场景。 -
灵活转换:
通过Integer.parseInt()
或Double.parseDouble()
自由转换类型。
方法对比与选型建议
特性 | Scanner 类 |
BufferedReader 类 |
---|---|---|
易用性 | ⭐⭐⭐⭐ (直接解析数字) | ⭐⭐ (需手动转换) |
性能 | ⭐⭐ (小型输入) | ⭐⭐⭐⭐ (缓冲优化) |
异常控制 | ⭐⭐ (需配合 hasNextXxx 验证) | ⭐⭐⭐ (明确捕获异常) |
适用场景 | 控制台交互、简单应用 | 文件/网络流、高频输入 |
最佳实践总结
- 优先选择
Scanner
:
适合大多数控制台程序,简化数字解析流程。 - 严格验证输入:
使用hasNextInt()
或try-catch
避免非法输入崩溃。 - 资源必须关闭:
在finally
块或 try-with-resources 中关闭流:try (Scanner scanner = new Scanner(System.in)) { // Java 7+ 自动关闭 // 操作代码 }
- 明确数据类型:
整数用int
/long
,小数用float
/double
,避免精度损失。
引用说明:本文代码示例基于 Oracle 官方 Java 17 文档,遵循 Java 标准库规范,异常处理逻辑参考《Effective Java》第 3 版条目 72(妥善处理异常)。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/19686.html