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

求助排查java.lang.StringIndexOutOfBoundsException异常原因

解决StringIndexOutOfBoundsException: String index out of range: 7的问题

嘿,我来帮你揪出这个索引越界的问题!你遇到的java.lang.StringIndexOutOfBoundsException是因为代码里的递归逻辑有两个小问题,直接导致了访问超出字符串范围的索引。

问题根源分析

先看你代码里的递归触发条件:

if (index < input.length()) {
    luckySevens(input, index+1, sevens);
}

假设你的字符串长度是7,有效索引范围是0~6。当递归到index=6时,6 < 7的条件成立,于是会调用luckySevens(input, 7, sevens)。而在这个新的递归调用里,第一行就执行input.charAt(7)——这显然超出了字符串的最大索引6,直接抛出了你看到的异常。

另外还有一个隐藏的逻辑错误:你调用递归后没有返回它的结果,导致递归过程中更新的sevens值根本不会传递回上层调用,最终返回的还是初始的sevens值,这会让你的计数逻辑完全失效。

修复后的代码

把逻辑调整一下,先做越界判断,再处理字符,并且正确返回递归结果:

public class LuckySeven { 
    public int luckySevens(String input, int index, int sevens) { 
        // 先判断索引是否越界,越界直接返回当前结果
        if (index >= input.length()) {
            return sevens;
        }
        
        int curDigit = input.charAt(index) - 48; 
        if (curDigit == 7) { 
            if (index > 0 && (input.charAt(index - 1) - 48) == 7) { 
                sevens += 14; 
            } else {
                sevens++; 
            }
        } 
        // 递归处理下一个索引,并返回递归结果
        return luckySevens(input, index + 1, sevens); 
    }
}

修复说明

  1. 越界防护:在方法最开头添加if (index >= input.length())判断,一旦索引超出有效范围,直接返回当前的sevens值,避免执行后续的charAt操作。
  2. 正确传递递归结果:把原来的无返回递归调用改成return luckySevens(...),这样递归过程中更新的sevens值会逐层传递回上层调用,保证计数结果正确。

这样修改后,不仅能解决索引越界的问题,还能让你的幸运数字7的计数逻辑正常工作。

内容的提问来源于stack exchange,提问作者Addymeister

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:28:36