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

Java StringIndexOutOfBoundsException问题排查:带连字符数字求和报错

问题排查与解决

异常原因

你遇到的StringIndexOutOfBoundsException是两处索引使用错误导致的:

  • socialNum.indexOf("")返回0:空字符串的索引查找会直接返回0,导致substring(socialNum.indexOf("-") + 1, 0)出现起始索引大于结束索引的情况(比如测试字符串"102-2-12"中,第一个-在索引3,起始索引是4,结束索引是0),违反了substring方法的参数规则。
  • 最后一段子串截取错误:socialNum.substring(socialNum.lastIndexOf("-"), socialNum.length() - 1)会包含最后一个-本身,且length()-1会丢失最后一个字符,比如测试字符串里会截取到-1而非目标的12。

修复方案

方案1:使用split方法(推荐,简洁通用)

直接用-分割字符串,遍历分割后的数组转换为整数求和,无需手动处理索引:

public int chopAndAdd() {
    sum = 0;
    // 按"-"分割字符串
    String[] parts = socialNum.split("-");
    for (String part : parts) {
        // 转换为整数并累加
        sum += Integer.parseInt(part);
    }
    return sum;
}

方案2:手动处理索引(适合理解字符串操作逻辑)

如果要手动处理,需正确获取每个分隔符的位置,再截取对应区间:

public int chopAndAdd() {
    sum = 0;
    int firstDash = socialNum.indexOf("-");
    int secondDash = socialNum.lastIndexOf("-");
    
    // 截取第一段:0到第一个"-"
    sum += Integer.parseInt(socialNum.substring(0, firstDash));
    // 截取第二段:第一个"-"+1到第二个"-"
    sum += Integer.parseInt(socialNum.substring(firstDash + 1, secondDash));
    // 截取第三段:第二个"-"+1到字符串末尾
    sum += Integer.parseInt(socialNum.substring(secondDash + 1));
    
    return sum;
}

测试验证

修改后运行你的测试用例test.setSocial("102-2-12"),会得到正确结果:SS# 102-2-12 has a total of 116(102+2+12=116)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:01:27