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

Java Scanner输入异常咨询:按回车无即时输出,输入字符串后批量打印

Scanner空行输入无即时输出的问题解析

问题原因

核心问题出在Scanner.hasNext()方法的默认行为上:

  • hasNext()默认以空白字符(换行符、空格、制表符等)作为分隔符,它会跳过所有空白内容,仅当检测到非空白的输入时才返回true。
  • 当你连续按下回车(输入空行),输入缓冲区里只有换行符(属于空白字符),hasNext()会一直阻塞,不会进入循环执行nextLine()和打印操作。
  • 直到输入Hello World!这类非空白内容,hasNext()才触发返回true,此时nextLine()会一次性读取缓冲区中所有积压的空行,导致之前的序号被批量打印出来。

解决方案

最直接有效的方法是用Scanner.hasNextLine()替代hasNext():

  • hasNextLine()的判断逻辑是是否存在下一行输入,不管该行是空行还是有内容,只要输入流中有换行符就会返回true,完全匹配你需要的空行触发打印的需求。

修改后的代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int count = 1;

        while (input.hasNextLine()) {
            String s = input.nextLine();
            System.out.println(count + " " + s);
            count++;
        }

        input.close();
    }
}

修改后运行即可实现你的期望效果:每按一次回车就即时输出对应的序号,输入字符串时输出带内容的编号行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:05:02