Java中如何通过单个空行输入终止使用Scanner的while循环
问题根源
你的代码需要两次空行才能退出的核心原因是逻辑结构存在两处缺陷:
- 循环内读取到空行后将
line赋值为null,后续while判断调用line.equals("")会触发空指针异常,退出逻辑执行异常 - 行读取逻辑拆分不合理:初始单独读取第一行,循环内部又单独读取下一行,空行判定和循环退出的时机错位,导致单次空行无法触发终止逻辑
修复方案
将行读取和空行校验统一合并到循环条件中,匹配到单空行直接终止循环:
Scanner tgb = new Scanner(System.in); String line; // 若需要严格匹配完全无空格的空行,可删除trim() while ((line = tgb.nextLine()) != null && !line.trim().isEmpty()) { String[] splitString = line.split(" "); String command = splitString[0]; switch (command) { case "def": definition(splitString); break; case "calc": calculation(splitString); break; case "clear": clear(); break; } } tgb.close();
逻辑说明
修复后的代码每次读取一行内容后优先做非空校验,只要输入为空行就会直接跳出循环,没有额外的中间分支逻辑,既避免了空指针异常,也完全满足单空行退出的需求。
内容的提问来源于stack exchange,提问作者Isak Holmström
相关产品推荐
相关产品推荐

