You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:34:37