java中scanner类通过绑定system.in创建对象,调用nextxxx()读取基础类型,需注意next()与nextline()混用时的换行符残留问题,应配合hasnextxxx()校验并用try-with-resources或close()释放资源。

Java 中 Scanner 类是初学者与用户交互最常用的方式,它能从控制台读取字符串、数字、布尔值等各类输入,核心在于正确创建 Scanner 对象、调用对应 nextXxx() 方法,并注意输入缓冲区的处理细节。
如何创建 Scanner 并读取基础类型
Scanner 需绑定输入源(通常是 System.in),之后调用方法获取不同类型数据。每种 nextXxx() 方法只读取“下一个有效标记”,遇到空白符(空格、换行、制表符)即停止。
- 读字符串用 next():只读到第一个空格前的内容,不包含换行符;若要读整行(含空格),改用 nextLine()
- 读整数用 nextInt(),读浮点数用 nextDouble(),读布尔值用 nextBoolean()
- 所有 nextXxx() 方法在输入不匹配时会抛出 InputMismatchException,建议配合 hasNextXxx() 先校验
next() 和 nextLine() 混用时的常见陷阱
当先调用 nextInt() 再调用 nextLine(),后者常意外返回空字符串——因为 nextInt() 只读数字,不消耗其后的换行符,nextLine() 立即读到这个残留换行,直接结束。
- 解决办法:在 nextInt() 后加一句 scanner.nextLine() 清掉换行符
- 或者统一用 nextLine() 读入字符串,再用 Integer.parseInt() 等转换,更可控也更安全
- 示例:用户先输年龄(int),再输姓名(含空格),必须清缓存,否则姓名读不到
用 hasNextXxx() 实现安全输入校验
避免程序因非法输入崩溃,应在调用 nextXxx() 前用对应 hasNextXxx() 判断输入是否符合预期类型。
- hasNextInt() 返回 true 才调用 nextInt(),否则提示重新输入
- 配合 while 循环可实现“直到输入合法为止”的交互逻辑
- 若需跳过当前非法输入,用 next() 消耗掉错误标记,防止死循环
Scanner 使用完毕记得关闭
虽然从控制台读取时关闭 Scanner 不影响功能,但养成 close() 习惯有助于理解资源管理逻辑,尤其将来读文件时必不可少。
- 在 try-with-resources 中自动关闭最稳妥:try (Scanner sc = new Scanner(System.in)) { ... }
- 手动关闭写法:scanner.close(),注意关闭后不可再调用任何 nextXxx() 方法
- 关闭 System.in 本身不会出错,但 Scanner 关闭后重用会抛 IllegalStateException
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











