You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Java Scanner类hasNext()方法工作机制的疑问

Scanner的hasNext()输入单个token后返回true的原因

你的代码示例:

Scanner keyboard = new Scanner(System.in);
System.out.println(keyboard.hasNext());

问题解析

  • hasNext()是阻塞式方法,且标准输入流System.in默认不会自动终止。当你输入"test"并回车时,Scanner确实解析出了第一个token,但此时输入流并没有关闭,hasNext()会持续等待是否有新的输入内容,因此返回true。
  • Scanner默认以空白字符(回车、空格、制表符等)作为分隔符,回车只是用来分隔token的标记,不是输入结束的信号。只有当你手动发送EOF(文件结束)信号(Unix/macOS用Ctrl+D,Windows用Ctrl+Z),输入流才会终止,此时hasNext()才会返回false。
  • 你觉得输入单个内容后应该没有下一个token,是混淆了"当前已输入的内容是否有下一个token"和"输入流是否还会有新的token"。hasNext()判断的是后者——只要输入流未关闭,它就会一直等待新输入,不会因为当前已解析完所有现有token就返回false。

内容的提问来源于stack exchange,提问作者Kon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:07:04