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
相关产品推荐
相关产品推荐

