Java实现isogram校验的代码问题排查及空/全空格字符串过滤方法
问题排查与修复方案
现有代码故障点汇总
- 空校验逻辑顺序错误:代码先执行
st.charAt(0)再判断空字符串,空字符串调用charAt会直接抛出索引越界异常 - 字符串相等判断不规范:Java中判断字符串内容相等不能用
==,需使用equals方法 - 循环边界错误:
i<st.length()-1会漏掉字符串最后一个字符的校验,逻辑残缺 - 缺少全空格字符串、数字、特殊字符的校验逻辑
- 单字符输入场景处理错误:单字符输入时循环不会执行,直接返回初始值false,不符合isogram规则
- 初始flag赋值逻辑错误:合法输入没有命中分支时会返回错误结果
修复后代码
public class Isogram { public static boolean isIsogram(String str) { // 前置校验:覆盖null、空字符串、全空格字符串场景 if (str == null || str.trim().isEmpty()) { return false; } String st = str.toLowerCase(); StringBuilder checker = new StringBuilder(); for (int i = 0; i < st.length(); i++) { char current = st.charAt(i); // 校验是否为a-z范围内的合法字母,排除数字、特殊字符 if (current < 'a' || current > 'z') { return false; } // 校验字符是否重复 if (checker.indexOf(String.valueOf(current)) != -1) { return false; } checker.append(current); } return true; } }
修复说明
- 前置trim后判空,一次性覆盖空字符串、全空格字符串、null三类无效输入场景
- 调整循环逻辑从0开始遍历所有字符,覆盖单字符输入场景
- 新增非法字符校验,只要出现a-z以外的字符直接返回false,满足无数字、无特殊字符的要求
- 命中非法条件直接提前返回,无需遍历全串,性能更优
- 用StringBuilder代替字符串拼接,减少不必要的字符串对象生成
内容的提问来源于stack exchange,提问作者Ritesh Vesalapu
相关产品推荐
相关产品推荐

