Java中Scanner错误接收回车键为合法输入的原因与解决方案
问题成因
- 当用户直接按下回车键时,
Scanner.nextLine()会读取到长度为0的空字符串""作为输入内容。 - 现有
inputChecker方法中,返回值标识loopChecker被初始化为true,如果传入的是空字符串,message.length()为0,两层for循环的遍历逻辑完全不会触发,方法会直接返回初始的true值,导致空输入被判定为合法。 - 额外说明:你当前写的双层for循环属于冗余逻辑,外层循环的
i变量全程没有被使用,实际只需要一层循环就可以完成遍历校验。
可行解决方案
方案1:修改原有校验逻辑,增加空判断+优化遍历
public static boolean inputChecker(String message){ // 空输入、全空白输入直接判定为不合法 if (message == null || message.isBlank()) { return false; } String alphabet = "abcdefghijklmnopqrstuvwxyzæøå"; // 单层循环遍历每个字符即可,发现非法字符直接返回无需继续遍历 for (int i = 0; i < message.length(); i++) { if(alphabet.indexOf(message.charAt(i)) == -1){ return false; } } return true; }
方案2:用正则表达式简化校验逻辑
public static boolean inputChecker(String message){ // 正则规则:仅允许匹配至少1个指定范围内的丹麦小写字母 return message != null && message.matches("^[a-zæøå]+$"); }
内容的提问来源于stack exchange,提问作者Aleksandar
相关产品推荐
相关产品推荐

