登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
从底层逻辑,谈谈next()和nextLine()配合使用时,出现的 ...
从底层逻辑,谈谈next()和nextLine()配合使用时,出现的“跳过输入”的现象
[ 复制链接 ]
峰埋姚
2025-9-28 18:15:09
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
点击查看代码
package com.jia.scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接受键盘数据
Scanner sc = new Scanner(System.in);
System.out.println("使用next方式接受:");
//判断用户有没有输入字符串
if (sc.hasNext()){
//使用next方式接受
String str = sc.next();
System.out.println("输出的内容:" + str);
}
System.out.println("============================================");
System.out.println("使用nextLine:");
if (sc.hasNextLine()){
String str = sc.nextLine();
System.out.println("输出的内容:" + str);
}
//凡是属于IO流的类,如果不关闭会一直占用资源,要养成习惯用完就关掉
sc.close();//为了节省资源
}
}
复制代码
这段代码,运行后输出的结果是:
会出现
跳过用户输入的现象
。但是,并不符合我的需求,我希望是在使用nextLine前,可以再次从键盘输入新的内容,再输出新的结果。
接下来,我们可以从输入缓冲区机制和next还有nextLine两种方法的底层处理逻辑进行分析,该现象产生的原因:
数据是在
输入缓冲区
作为“中间站”暂存
计算机在处理键盘输入时,并不是让程序直接“实时”的读取每一个按键,这样效率太低了,而是通过
输入缓冲区
作为中间层:
用户敲击键盘的字符会先存入缓冲区,直到用户按下回车键(\n),缓冲区才会通知程序“有数据可以读取”
程序中的Scanner类本质就是从缓冲区中读取数据,而不是直接从键盘读取
next()方法的底层处理逻辑:
next()的核心逻辑是
以空白字符为分隔符的非空白字符串读取
,具体步骤是:
跳过前导空白字符
:自动忽略缓冲区中开头的所有空白字符(空格、指标符\t、换行符\n等)。
读取有效的字符
:从第一个非空白字符开始读取,持续读取直到遇到
下一个空白字符
(空格、换行等)。
终止但是不消耗分隔符
:当遇到空白字符时,next()会停止读取数据,但是
这个空白字符不会被从缓冲区中移除
,仍然留在缓冲区中。
nextLine()方法的底层处理逻辑:
nextLine()的核心逻辑是
读取一整行内容,知道换行符为止
,具体步骤是:
从当前位置开始读取数据
:不跳过任何字符,直接从缓冲区当前位置开始读取数据。
以换行符为终止符
:持续读取所有字符(包括空白字符),直到遇到\n(换行符)。
消耗终止符
:读取完成后,会将终止的\n(换行符)从缓冲区中移除(即“消耗”掉)。
举例:
用户输入“hello world\n”(\n是用户按回车键产生的换行符),计算机缓冲区的内容为“hello world\n”。
next()执行后:
读取到“hello” (非空白字符开始,知道空格停止);
缓冲区中剩余“ world\n” (空格和后续字符未被消耗移除);
nextLine()执行后:
读取到“ world” (从当前位置,即空格开始,知道\n换行符为止);
同时消耗掉\n(换行符),缓冲区变为空。
综上所述,出现跳过输入现象的根本原因是:
next()读取后,缓冲区中残留了未被消耗掉的空白字符(如空格)和换行符前的字符内容;
后续的nextLine()读取时,会直接从缓冲区这些残留的内容(从空白字符到\n),并消耗掉\n(换行符);
由于执行完next()读取都,缓冲区还有内容(从空白字符到\n)未被消耗,所以,nextLine()无需等待用户输入新内容,导致,看起来出现了“跳过输入现象”。
当然,存在解决方法,只需在next()后额外调用一次nextLine()清空缓冲区,即可。
本质是:
让第一次nextLine()消耗掉next()残留的空白字符和\n,使缓冲区为空。这样,后续真正需要使用nextLine()就会等待用户输入新内容(因为缓冲区已经被清空,必须等待新的\n触发)。
点击查看代码
package com.jia.scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接受键盘数据
Scanner sc = new Scanner(System.in);
System.out.println("使用next方式接受:");
//判断用户有没有输入字符串
if (sc.hasNext()){
//使用next方式接受
String str = sc.next();
sc.nextLine();//紧跟着,使用nextLine释放空格,程序才会接着让用户输入
System.out.println("输出的内容:" + str);
}
System.out.println("============================================");
System.out.println("使用nextLine:");
if (sc.hasNextLine()){
String str = sc.nextLine();
System.out.println("输出的内容:" + str);
}
//凡是属于IO流的类,如果不关闭会一直占用资源,要养成习惯用完就关掉
sc.close();//为了节省资源
}
}
复制代码
该代码运行结果如下:
符合我的需求!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
底层
逻辑
谈谈
next
nextLine
相关帖子
解构 AICoding 底层逻辑:人的能力定义 AI 边界
Next.js 静态导出:那些你不知道的坑(附完美避坑方案)
Next.js 静态导出:那些你不知道的坑(附完美避坑方案)
鸿蒙Next原生IM即时通讯RainbowTalk,纯ArkTS编写,基于开源MobileIMSDK框架
鸿蒙Next原生IM即时通讯RainbowTalk,纯ArkTS编写,基于开源MobileIMSDK框架
Condition底层机制剖析:多线程等待与通知机制
Condition底层机制剖析:多线程等待与通知机制
DC逻辑综合及优化
Java 创建对象的 6 种方式 + 底层原理(面试必考)
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
解构 AICoding 底层逻辑:人的能力定义 AI 边界
13
256
卿搞笔
2026-02-06
安全
Next.js 静态导出:那些你不知道的坑(附完美避坑方案)
5
181
官厌
2026-02-13
安全
Next.js 静态导出:那些你不知道的坑(附完美避坑方案)
3
953
袋岖荤
2026-02-13
安全
鸿蒙Next原生IM即时通讯RainbowTalk,纯ArkTS编写,基于开源MobileIMSDK框架
1
257
郦湘云
2026-02-26
安全
鸿蒙Next原生IM即时通讯RainbowTalk,纯ArkTS编写,基于开源MobileIMSDK框架
0
20
蜴间囝
2026-02-26
业界
Condition底层机制剖析:多线程等待与通知机制
3
936
缄戈
2026-02-27
业界
Condition底层机制剖析:多线程等待与通知机制
0
503
腥狩频
2026-02-27
业界
DC逻辑综合及优化
0
923
墨佳美
2026-03-05
安全
Java 创建对象的 6 种方式 + 底层原理(面试必考)
0
965
高小雨
2026-03-05
回复
(25)
上官银柳
2025-10-13 00:53:19
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
城徉汗
2025-10-18 00:41:03
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
零幸
2025-12-14 19:17:39
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
那虻
2025-12-16 01:58:34
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
骆贵
2026-1-16 18:36:57
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
讹过畔
2026-1-22 06:54:22
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
瞧厨
2026-1-22 12:07:34
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
师悠逸
2026-1-23 04:36:50
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
前排留名,哈哈哈
寨重
2026-1-25 09:23:23
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
劳暄美
2026-1-27 04:12:50
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
莠畅缕
2026-2-2 03:47:30
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
敞撬
2026-2-6 06:23:57
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
讹过畔
2026-2-6 07:18:32
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
鞭氅
2026-2-8 08:54:56
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
祝安芙
2026-2-8 15:37:31
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
扒钒
2026-2-8 19:17:39
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
汹萃热
2026-2-8 21:28:03
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,下载保存了,貌似很强大
洪势
2026-2-9 13:48:45
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
郦湘云
2026-2-10 00:08:04
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
分享、互助 让互联网精神温暖你我
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
峰埋姚
2026-2-10 00:08:04
关注
0
粉丝关注
24
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
宋子
9888
6
韶又彤
9910
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9871
10
遗憩
10006
查看更多
今日好文热榜
836
C#/.NET/.NET Core优秀项目和框架2026年2月
565
为什么 AI 能赢世界冠军,却开不好车?——
894
AI Agent框架探秘:拆解 OpenHands(11)--
540
MAUI项目在Android平台通过U盘实现软件更新
813
前后端交互中时间的格式化与解析,将会面临
683
MyBatis-配置文件解读及MyBatis为何不用编
155
gcsfuse中的锁与偏序理论
855
java String为什么不可变
965
Java 创建对象的 6 种方式 + 底层原理(面
133
# 纽约出行机票全攻略:特价预订+机场指南
956
Coolify: Vercel 的开源版私有化部署平替版
930
探索JavaScript的秘密令牌:独一无二的`Sym
191
MySQL InnoDB Cluster节点重新加入集群踩坑
306
Kubernetes Dashboard部署
646
长春市万佳医院|医疗场景数字化管理提效
392
PicoServer 跨平台 Web 实战系列(二) 路由
857
.NET SqlSugar多线程下SqlSugarClient 的线
934
通义深度搜索-API概览
680
杨辉三角原理及PHP代码实现
386
Java SE 和 Java EE 的核心功能模块