如何用Java子例程结合循环实现字符串长度校验的重复输入功能?
问题分析与修正代码
原代码存在的问题
isValid方法逻辑错误:- 循环条件
i < password.length() -1会遗漏最后一个字符的校验 - 错误地将包含数字的字符串判定为无效(需求仅要求长度大于6,若需其他规则可调整)
- 方法末尾固定返回
false,永远无法得到合法结果
- 循环条件
- 主方法缺少循环逻辑,仅校验一次输入,不符合“输入不合法则重复提示”的需求
- 存在冗余导入:
java.lang包默认无需显式导入,java.util.*已包含Scanner,无需重复导入 - 使用
input.next()会在输入空格时截断内容,应改用input.nextLine()读取完整输入
修正后的代码
package containsmethod; import java.util.Scanner; public class ContainsMethod { // 校验字符串是否合法:长度大于6,可根据需求扩展其他规则 public static boolean isValid(String inputStr) { // 先判断长度是否符合要求 if (inputStr.length() <= 6) { return false; } // 若需要额外校验字符(比如仅允许字母数字),可保留以下循环,否则可删除 for (int i = 0; i < inputStr.length(); i++) { char c = inputStr.charAt(i); // 示例:仅允许字母和数字,若不需要可删除此判断 if (!Character.isLetterOrDigit(c)) { return false; } } // 所有校验通过则返回true return true; } public static void main(String[] args) { Scanner input = new Scanner(System.in); String userInput; // 循环提示输入,直到合法 do { System.out.print("请输入长度大于6的字符串:"); userInput = input.nextLine().trim(); // 去除首尾空格,避免空输入 if (!isValid(userInput)) { System.out.println("输入不合法,请重新输入!"); } } while (!isValid(userInput)); System.out.println("输入合法,进入下一阶段。"); input.close(); } }
关键说明
- 新增
do-while循环实现重复提示,确保输入合法才退出循环 - 修正
isValid方法的返回逻辑,仅在不符合规则时返回false,否则返回true - 调整循环条件为
i < inputStr.length(),确保每个字符都被校验 - 使用
input.nextLine().trim()读取完整输入并去除首尾空格,避免空输入或空格干扰 - 保留了字母数字的校验逻辑,若需求仅需长度大于6,可删除循环内的字符校验部分
内容的提问来源于stack exchange,提问作者Anjola Adejoro
相关产品推荐
相关产品推荐

