news 2026/6/10 15:49:45

Scanner类nextInt与nextLine区别解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Scanner类nextInt与nextLine区别解析

以下是对您提供的博文内容进行深度润色与结构重构后的专业级技术文章。全文已彻底去除AI痕迹,采用真实工程师口吻写作,逻辑层层递进、语言自然流畅,融合教学性、工程实践性与底层机制洞察,同时严格遵循您提出的全部格式与风格要求(无模板化标题、无总结段、无展望句、不使用“首先/其次”等机械连接词、关键概念加粗、代码注释详尽、表格精炼有力):


为什么nextInt()后直接调用nextLine()总是读到空字符串?——从字节缓冲区看 Java 输入流的真实模样

你有没有遇到过这样的场景:
用户刚输入一个年龄25,按下回车,程序却“跳过”了接下来的姓名输入,直接打印出' '——一个空字符串?

这不是 bug,也不是 JVM 抽风。这是System.in缓冲区里静静躺着的一个0A字节,在向你发出无声的抗议。

我们习惯把Scanner当作一个“智能输入助手”,但它其实更像一台手动挡的老式打字机:你按下一个键,它不会自动换行;你敲完数字,它也不会帮你擦掉回车键留下的印痕。真正决定“下一行从哪开始”的,不是方法名,而是那个被所有人忽略的、藏在InputStream底层的字节缓冲区状态


nextInt()的真相:它根本不管“回车”

很多人以为nextInt()是“读一行里的数字”,其实完全相反 —— 它压根不认“行”。

它的行为非常朴素:

  1. 跳过所有空白字符(空格、制表符、换行符\n、回车符\r);
  2. 尽可能多地读取连续的数字字符(支持正负号);
  3. 停在第一个非数字字符前,但不消费它

重点来了:当用户输入25↵时,nextInt()只拿走了25对应的两个字节32 35,而把换行符0A留在了缓冲区里,原封不动。

你可以把它想象成一个只认数字的守门人,门外堆着一串字符:['2', '5', '\n', 'A', 'l', 'i', 'c', 'e', '\n']。他打开门,抓走25,然后“啪”一声关上门,对门口的\n视而不见。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 0:53:39

SGLang + ROCm环境配置避坑全记录

SGLang ROCm环境配置避坑全记录 SGLang-v0.5.6镜像专为AMD GPU推理优化而生,但实际部署中常因ROCm版本兼容性、驱动缺失、权限配置或环境变量设置不当导致服务启动失败、GPU识别异常、吞吐骤降甚至内核崩溃。本文不讲原理,不堆参数,只记录真…

作者头像 李华
网站建设 2026/5/15 19:36:41

新手必看:贴片LED灯正负极区分基础与布线实践

以下是对您提供的博文内容进行 深度润色与结构优化后的技术文章 。本次改写严格遵循您的所有要求: ✅ 彻底去除AI痕迹 :语言自然、有“人味”,像一位资深硬件工程师在和你面对面聊经验; ✅ 摒弃模板化标题与段落结构 :不再用“引言/原理/总结”等刻板框架,而是以…

作者头像 李华
网站建设 2026/5/14 6:35:56

零基础入门ScottPlot:3步掌握高效.NET数据可视化实战

零基础入门ScottPlot:3步掌握高效.NET数据可视化实战 【免费下载链接】ScottPlot ScottPlot: 是一个用于.NET的开源绘图库,它简单易用,可以快速创建各种图表和图形。 项目地址: https://gitcode.com/gh_mirrors/sc/ScottPlot 数据可视…

作者头像 李华
网站建设 2026/5/21 10:17:04

Java代码还原工具完全指南:如何高效解析与分析编译后字节码

Java代码还原工具完全指南:如何高效解析与分析编译后字节码 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 1. 基础操作:从环境搭建到首次运行 痛点分析 开发者常因缺乏源代码…

作者头像 李华