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

Java使用Scanner读取输入时输入finish后为何需按回车才能结束程序

Java Scanner输入阻塞及多余空行问题修复方案

问题根因

  • 终端默认是行缓冲模式:输入的内容只有按下回车后才会提交给程序处理,所以默认情况下输入完finish必须回车才能被程序读取。
  • 原有代码存在冗余读取逻辑:next()方法会自动跳过前置空白符(包含换行),额外添加的in.nextLine()不仅没有必要,还会导致读取残留换行,产生多余空行,同时在末尾读取finish时会增加阻塞概率。

修复方案

直接调整读取逻辑为逐行读取即可解决多余空行问题,同时优化退出流畅度:

public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    while (in.hasNextLine()) {
        String line = in.nextLine().trim();
        // 读到finish直接退出循环
        if (line.equals("finish")) {
            break;
        }
        // 按空白符拆分每行的三个参数
        String[] parts = line.split("\\s+");
        if (parts.length != 3) {
            System.out.println("wrong");
            continue;
        }
        String str1 = parts[0];
        String op = parts[1];
        String str2 = parts[2];
        if (op.equals("+")){
            System.out.println(str1 + str2);
        } else if (op.equals("*")){
            for (int i = 0; i < str2.length(); i++){
                System.out.print(str1);
            }
            System.out.println();
        } else {
            System.out.println("wrong");
        }
    }
    System.out.println("End");
    in.close();
}

免回车结束输入的方法

如果需要输入完finish不需要按回车就结束,输入完成后直接按下对应快捷键结束输入流即可:

  • Windows系统:按下Ctrl + Z
  • Linux/macOS系统:按下Ctrl + D

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:15:04