Java接收用户输入时输入空行如何正确跳出while循环
问题根因
循环无法正常退出的问题出在循环判断条件while (input.hasNext())上:Scanner的hasNext()方法会阻塞等待扫描到非空白的有效输入片段,当用户直接按回车键输入空行时,这个方法不会返回true,代码根本进不到循环体里,你写在内部的country.isEmpty()空行判断逻辑完全执行不到,自然没法触发break终止循环。
修复方法
把循环条件改成恒真while (true)即可——你已经在循环内部写了明确的空行退出逻辑,不需要靠hasNext()做循环边界控制。修复后的完整代码如下:
public void userInterface() { // 交互逻辑 Scanner input = new Scanner(System.in); System.out.println("Enter the date:"); String date = input.nextLine(); ArrayList<String> countries = new ArrayList<>(); System.out.println("Enter the list of countries (end with an empty line):"); while (true) { String country = input.nextLine(); // 检测到空行直接退出循环 if (country.isEmpty()){ break; } char firstChar = country.charAt(0); if (!Character.isUpperCase(firstChar)){ System.out.println("Type with Capital Letter!"); } else { countries.add(country); } } input.close(); // 后续业务逻辑可在此处编写 }
补充说明
- 修复后的交互逻辑完全匹配你的预期:输入日期后逐行录入国家名,首字母大写的名称会被正常存入集合,首字母不符合要求的会弹出提示,直接按回车键输入空行时会立刻终止输入循环。
- 如果你希望把「输入多个空格后回车」的场景也识别为终止标记,可以把空行判断条件从
country.isEmpty()换成country.isBlank()(该方法从Java 11版本开始提供,会自动忽略首尾空白字符后判断内容是否为空)。
内容的提问来源于stack exchange,提问作者Joanna Green
相关产品推荐
相关产品推荐

