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

Java回文判断代码触发java.lang.StringIndexOutOfBoundsException异常的问题排查

回文判断代码的索引越界异常排查与修复

嘿,我来帮你搞定这个问题!你遇到的java.lang.StringIndexOutOfBoundsException是典型的字符串索引使用错误,另外代码里还有个隐藏的小问题,我一步步给你拆解:

异常根源

首先得记住:Java里字符串的索引是从0开始计数的。

  • 你的字符串"aabbaa"长度是6,所以合法的索引范围是0到5(对应第1到第6个字符)
  • 但你在main方法里调用palindrome(str, 0, n)时,n是str.length()返回的6,当方法执行str.charAt(end)时,end=6就超出了合法索引的上限,直接触发了越界异常

另外还有个容易忽略的问题:palindrome是实例方法(非静态),但你在静态的main方法里直接调用它,这其实是编译错误,只是索引异常先触发了而已。

修复方案

针对这两个问题,给你两种可行的修改方式:

方式一:把判断方法改为静态,修正end参数

这种方式最简单,适合工具类风格的写法:

public class Main {
    // 改为静态方法,让静态的main可以直接调用
    static boolean palindrome(String str, int start, int end){
        if(start >= end) return true;
        return(str.charAt(start) == str.charAt(end)) && palindrome(str, start+1, end-1);
    }

    public static void main(String[] args) {
        String str = "aabbaa";
        int n = str.length();
        // 把end参数改成n-1,对应最后一个字符的合法索引
        System.out.println(palindrome(str, 0, n-1));
    }
}

方式二:创建类实例调用方法,修正end参数

如果你想保持方法的实例属性,就用这种方式:

public class Main {
    boolean palindrome(String str, int start, int end){
        if(start >= end) return true;
        return(str.charAt(start) == str.charAt(end)) && palindrome(str, start+1, end-1);
    }

    public static void main(String[] args) {
        String str = "aabbaa";
        int n = str.length();
        // 创建Main类的实例
        Main palindromeChecker = new Main();
        // 传入合法的end索引n-1
        System.out.println(palindromeChecker.palindrome(str, 0, n-1));
    }
}

测试结果

修改后运行代码,控制台会输出true,完美验证"aabbaa"是回文字符串,同时再也不会抛出索引越界的异常啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:54:05