Scanner.hasNextLine始终返回true问题求助:标准输入读取无法终止
解决Scanner.hasNextLine()无限循环的问题
首先,咱们先搞清楚为什么你的程序一直卡在循环里——scanner.hasNextLine()会一直等待新的输入,直到系统收到「文件结束符(EOF)」。在控制台手动输入内容时,程序不知道你已经输入完了,它还在等你继续敲内容呢!
怎么让程序结束循环?
不同操作系统发送EOF的方式不一样:
- Windows系统:输入完所有内容后,按下
Ctrl + Z,然后按回车 - Linux/macOS系统:输入完所有内容后,按下
Ctrl + D
顺便修复代码里的小问题
你的代码还有两个细节漏洞:一是每次拼接行号和内容后没加换行符,最后输出的所有内容会挤在一行;二是行号没有自增,所有行都会显示成第1行。给你调整后的完整代码:
import java.util.Scanner; public class Main { // 补充缺失的类定义,Java程序必须用类包裹main方法 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int countLines = 1; while (scanner.hasNextLine()) { String line = scanner.nextLine(); sb.append(countLines).append(" ").append(line).append("\n"); // 添加换行符,保证每行独立显示 countLines++; // 行号自增,正确计数每一行 } System.out.println("finish"); System.out.println(sb.toString()); scanner.close(); } }
测试效果
比如你输入:
Hello world I am a file Read me until end-of-file
然后按下对应系统的EOF键,程序就会输出:
finish 1 Hello world 2 I am a file 3 Read me until end-of-file
这样就完美解决你的问题啦!
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

