Java StringIndexOutOfBounds异常求助:已做长度校验仍报错
问题排查与修复方案
我一眼就揪出了导致StringIndexOutOfBoundsException的元凶——你的while循环条件判断顺序搞反了!
核心问题分析
在Java中,&&是短路逻辑与,它会按照从左到右的顺序判断条件:
- 你当前的条件是
(bits.charAt(k)==bits.charAt(i)) && k<bits.length() - 当
k增长到等于bits.length()时,会先执行bits.charAt(k),但字符串的最大有效索引是bits.length()-1,这时候直接触发索引越界异常。
正确的做法是把边界判断放在前面,这样当k超出范围时,短路逻辑会直接跳过后面的字符比较,避免非法索引访问。
修复后的代码
for(int i=0; i<bits.length(); i++){ int counter = 1; // 建议把counter初始化移到循环内,避免外部残留值干扰 int k = i+1; // 调整条件顺序:先判断k是否在有效范围内 while(k<bits.length() && bits.charAt(k)==bits.charAt(i)) { counter++; k++; } if(bits.charAt(i)=='1'){ if(counter % 3 == 0){ morseCode.append('-'); } else { morseCode.append('.'); } } // 额外提示:你原代码未处理字符为'0'的情况,若有需要可以补充逻辑 }
额外的逻辑优化提示
你原外层循环的条件是i<bits.length()-1,这会导致字符串的最后一个字符永远不会被处理,我已经把它改成了i<bits.length(),确保所有字符都能被遍历到。
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

