Java中Scanner读取数据需注意缓冲区残留和类型匹配:nextInt()等不消费换行符,后续nextLine()会返回空串;应在数值读取后加scanner.nextLine()清空缓冲区,或统一用nextLine()配合parseXxx()转换;hasNextXxx()用于循环读取;Scanner关联System.in时无需close()。

Java中使用Scanner读取数据,核心是创建Scanner对象并调用其nextXxx()方法(如nextInt、nextLine等),但要注意输入缓冲区残留和类型匹配问题,否则容易出现跳过输入或异常。
基本用法:创建Scanner并读取不同类型的值
Scanner通常绑定System.in来读取控制台输入。需注意每种读取方法的行为差异:
- nextInt()、nextDouble()等数值方法只读取有效数字部分,**不会消费换行符**,后续调用nextLine()会直接返回空字符串
- nextLine()读取整行(含空格),并自动跳过前面的换行符,适合读取字符串或在数值读取后“清空”缓冲区
- next()只读取到下一个空白字符(空格、制表、换行),不支持带空格的字符串
避免常见陷阱:处理换行符残留
混合使用nextInt()和nextLine()时最易出错。例如:
int age = scanner.nextInt();String name = scanner.nextLine(); // 这里会立刻返回空串
解决办法是在数值读取后加一句scanner.nextLine()吸收残留换行符:
本文档主要讲述的是Android数据格式解析对象JSON用法;JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java。比XML更轻量级,Json使用起来比较轻便和简单。JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
立即学习“Java免费学习笔记(深入)”;
- int age = scanner.nextInt();
scanner.nextLine(); // 清除换行符
String name = scanner.nextLine(); - 或者统一用nextLine()读取,再用Integer.parseInt()等转换类型,更安全可控
读取多行或不确定数量的数据
可用hasNextXxx()判断是否有对应类型输入,配合循环使用:
- while(scanner.hasNextInt()) { int x = scanner.nextInt(); /* 处理x */ }
- while(scanner.hasNextLine()) { String line = scanner.nextLine(); /* 处理行 */ }
- 注意:hasNextLine()在用户输入EOF(Windows按Ctrl+Z,Mac/Linux按Ctrl+D)时返回false
关闭Scanner与资源管理
Scanner包装了System.in,而System.in是系统资源,一般**不需要也不建议主动close()**,否则会导致后续无法再读取标准输入。仅当Scanner关联的是文件或网络流等外部资源时才需try-with-resources或手动关闭。









