Java如何校验用户输入是否为合法char类型字符并填充数组
问题分析与修正方案
原fillArray方法存在以下核心问题:
- 多次调用
kb.next()重复消耗用户输入:判断校验时、赋值时、报错提示时各调用一次,会导致用户单次输入被多次读取,逻辑完全错乱 - 校验规则错误:要求输入范围是[a,z]小写字母,原逻辑反而判断输入是否为空格,完全不符合需求
- 校验失败后没有重试逻辑:输入不合法时直接进入下一次循环,会导致对应数组位置为空,无法正确填充
- 额外注意:
kb.nextInt()读取数组大小后会在输入缓冲区残留换行符,需要先处理避免后续读取输入异常
修正后的fillArray方法代码
public static void fillArray(Scanner kb, char[] c) { // 先消费掉nextInt残留的换行符 kb.nextLine(); for (int i = 0; i < c.length; i++) { char inputChar; // 循环直到输入合法 while (true) { System.out.println("Enter a value [a,z]"); String input = kb.nextLine().trim(); // 先校验输入长度是否为1,避免charAt(0)越界 if (input.length() != 1) { System.out.println("输入不合法,请输入单个小写字母"); continue; } inputChar = input.charAt(0); // 校验是否在a-z范围内 if (inputChar >= 'a' && inputChar <= 'z') { break; } else { System.out.println(inputChar + " 不在[a,z]区间内,请重新输入"); } } c[i] = inputChar; } }
改动点说明
- 先调用
kb.nextLine()消费掉读取数组大小时残留的换行符,避免后续第一次读取输入拿到空字符串 - 每个数组位置添加while死循环,只有输入合法才会跳出循环填充当前位置,否则一直要求用户重新输入
- 每次用户输入只读取一次存入变量,避免重复消耗输入
- 先校验输入长度是否为1,避免用户输入多个字符时调用
charAt(0)只取第一个字符的不符合预期的行为 - 修正校验规则,判断输入字符是否在a到z的小写字母区间内
内容的提问来源于stack exchange,提问作者user16971494
相关产品推荐
相关产品推荐

