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

如何修复Java回文程序中的StringIndexOutOfBoundsException异常?

解决Java substring导致的StringIndexOutOfBoundsException问题

嘿,这个问题我太熟了!咱们先把错误根源揪出来,再一步步修复。

错误原因分析

你看到的StringIndexOutOfBoundsException是因为你调用substring的对象str2初始是空字符串""——它的长度是0,但你却试图从索引2开始截取子串,这显然超出了它的范围(空字符串连索引0都不存在),JVM肯定会报错。

而且你代码里的逻辑也有点混淆:你要处理的是sentence的回文,却错误地在空字符串str2上调用substring了。

修复方案

首先,把substring的调用对象改成sentence,然后搞清楚substring参数的规则:
Java的substring(int beginIndex, int endIndex)是左闭右开区间——包含beginIndex的字符,不包含endIndex的字符。如果要截取到字符串末尾,直接用substring(beginIndex)这个重载方法就好,不用写第二个参数。

比如修正你的循环代码:

// 假设sentence是你要处理的原始字符串
String str2 = ""; // 如果这个变量没用可以删掉,或者根据你的逻辑赋值
for(int k = 2; k < sentence.length(); k++) {
    // 从索引k开始截取到sentence末尾的子串
    String str3 = sentence.substring(k);
    // 接下来添加你的回文判断逻辑,比如检查str3是否是回文
}

完整的回文检测示例

如果要实现子串的回文检测,这里给你一个完整的可运行示例:

public class PalindromeSubstringChecker {
    public static void main(String[] args) {
        String sentence = "abccba123321";
        for(int k = 2; k < sentence.length(); k++) {
            String subStr = sentence.substring(k);
            if(isPalindrome(subStr)) {
                System.out.println("找到回文子串: " + subStr);
            }
        }
    }

    // 判断单个字符串是否为回文的工具方法
    private static boolean isPalindrome(String str) {
        int left = 0;
        int right = str.length() - 1;
        while(left < right) {
            if(str.charAt(left) != str.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}

关键注意点

  • 永远确保调用substring的字符串不是空的,且beginIndex的范围是0 ≤ beginIndex < 字符串长度;如果用双参数版本,endIndex要满足beginIndex ≤ endIndex ≤ 字符串长度
  • 别搞混变量!你要处理的是sentence的内容,就别在空的str2上瞎操作啦
  • 截取到末尾时用单参数substring,代码更简洁不容易出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:30:59