java中用scanner读取控制台输入需三步:导入java.util.scanner、程序开始处创建一次scanner对象、main结束前调用close();选对方法避坑,nextint()后须跟nextline()清换行符;安全读整数应统一用nextline()+trim()配合try-catch校验;循环输入时scanner应在循环外创建。

Java 中用 Scanner 读取控制台输入,关键不在“能读”,而在“读得稳”——既要防类型错误导致崩溃,又要避免换行符残留引发跳过输入,还得支持用户反复试错不卡死。
必须做的三件事:导入、创建、关闭
Scanner 类在 java.util 包里,不导包会编译失败;它依赖 System.in 构建,且用完要关,否则可能泄漏资源:
- 开头写
import java.util.Scanner; - 只在程序开始处创建一次:
Scanner sc = new Scanner(System.in); - 所有输入操作结束后调用
sc.close();(尤其在 main 结束前)
选对方法,避开常见坑
不同方法处理换行符的方式不同,混用就容易出问题:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
nextLine():读整行,保留空格,以回车为界;适合姓名、地址等含空格内容 -
nextInt()、nextDouble()等:只读对应类型值,但不消费换行符 - 典型陷阱:先调
nextInt()读年龄,再调nextLine()读地址 → 地址直接拿到空字符串 - 解决办法:在
nextInt()后加一句sc.nextLine();手动清掉残留换行符
安全读整数:别信 nextInt(),改用 nextLine() + 校验
用户输 “abc” 或 “3.14”,nextInt() 会抛异常且卡住缓冲区,后续读取全乱。稳妥做法是:
- 统一用
sc.nextLine().trim()获取原始字符串 - 用
Integer.parseInt()转换,并套try-catch捕获NumberFormatException - 转换成功后,再检查数值范围(如成绩 0–100)
- 失败就提示重输,循环直到合法为止
循环输入时别重复创建 Scanner
如果要做“持续输入直到输入 q 退出”,千万别在 while 循环里反复 new Scanner(System.in):
- 每次新建对象开销大,还可能干扰输入流状态
- 正确做法:循环外建好 Scanner,每次只调一次
sc.nextLine()拿整行 - 拿到字符串后,先判断是不是 “q” 或 “quit”,是就 break;否则再解析处理
- 这样既响应及时,又不会让用户多输一次
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










