关于Scanner类in.hasNext()方法:如何让输入结束时返回false
解决Scanner.hasNext()无法终止循环的问题
问题原因
Scanner.hasNext()会持续等待输入,直到检测到输入流的结束标记。在控制台输入场景下,系统不会自动结束输入流,所以方法会一直返回true,导致循环无法终止。
解决方案
1. 控制台手动触发输入流结束
根据操作系统不同,按下对应快捷键发送结束信号:
- Windows:按下
Ctrl + Z,然后按回车键 - Linux/macOS:按下
Ctrl + D
2. 通过文件重定向输入
如果需要批量输入内容,可以将输入内容写入文件,运行程序时通过命令行重定向输入流:
java Test < input.txt
当文件内容读取完毕,hasNext()会自动返回false,循环终止。
3. 自定义结束标记
如果不想依赖系统快捷键,可以设定一个自定义的结束字符串(比如exit),在读取到该标记时主动终止循环:
import java.util.ArrayList; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner in = new Scanner(System.in); ArrayList<String> str = new ArrayList<>(); String input; while (in.hasNext()) { input = in.next(); // 读取到自定义结束标记时退出循环 if ("exit".equals(input)) { break; } str.add(input); } in.close(); } }
内容的提问来源于stack exchange,提问作者Ivan LIU
相关产品推荐
相关产品推荐

