Java用Scanner的hasNextLine()读取多行输入不终止、漏打最后行如何解决
Java Scanner多行输入问题解决方案
你遇到的问题是标准输入流的EOF触发逻辑,以及代码细节疏漏导致的,具体解决方法如下:
问题根因
Scanner.hasNextLine()读取System.in(控制台标准输入)时,会一直阻塞等待新输入,默认不会主动判定输入结束,只有收到系统发送的EOF(输入结束符)信号时才会返回false,退出循环。- 你提供的代码中
System.out.println(lines)末尾缺少分号,会直接导致编译失败,运行前需要先补上这个语法错误。 - 最后一行内容无法打印的常见原因是输入完最后一行后没有按回车键,内容还停留在控制台缓冲区,没有被
Scanner.nextLine()读取到。
解决方法
方法1:手动发送EOF终止循环
不需要修改代码,输入完所有内容后通过系统快捷键发送终止信号即可:
- Windows系统:输入完所有内容、按回车确认最后一行输入后,按下
Ctrl + Z,再按一次回车即可终止循环。 - macOS/Linux系统:输入完所有内容、按回车确认最后一行输入后,按下
Ctrl + D即可直接终止循环。
方法2:自定义终止规则
如果不想每次手动发终止信号,可以在代码里约定输入指定内容时退出循环,比如约定输入exit就结束,示例代码如下:
import java.util.ArrayList; import java.util.Scanner; public class ReadMultiLines { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArrayList<String> lines = new ArrayList<>(); while (sc.hasNextLine()) { String currentLine = sc.nextLine(); // 匹配到终止关键词直接退出循环 if ("exit".equals(currentLine)) { break; } lines.add(currentLine); System.out.println(lines); } sc.close(); // 此处可添加循环结束后的统一处理逻辑 } }
方法3:文件输入自动终止
如果你的输入内容是提前写在文件里的,可以通过输入重定向的方式运行程序,文件自带EOF标记,程序读完所有内容会自动退出,不需要手动操作,运行命令示例:java ReadMultiLines < 你的输入文件路径.txt
内容的提问来源于stack exchange,提问作者Meen ki
相关产品推荐
相关产品推荐

