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

Java报String index out of range错误,最长重复子串代码问题排查

问题排查
  • 数组越界问题:while循环判断stA.charAt(p1+1)==stA.charAt(p2+1)前,没有校验p1+1和p2+1是否小于字符串长度,当p1或p2已经指向字符串最后一个字符时,访问+1的下标就会触发String index out of range异常。
  • 字符串初始化错误:stB初始值为null,使用+=拼接字符时会先把null转为字符串"null"拼在最前面,导致最终输出结果前缀异常,和预期不符。
  • 逻辑提前终止错误:找到第一组匹配的连续子串后直接将i、j设为字符串长度终止循环,没有遍历所有可能的子串,无法保证得到的是最长子串。
  • 计数逻辑错误:count变量没有和历史最长长度做对比更新,也没有在每次找到新的匹配子串时重置,计数结果不符合实际子串长度。
  • 循环边界错误:两层for循环的终止条件为i<stA.length()-1、j<stA.length()-1,会漏掉字符串最后一个位置的字符匹配场景。
  • 子串重置逻辑缺失:每次匹配新的子串时没有清空stB的历史内容,会将多次匹配的字符拼接在一起,结果错误。
修复后参考代码
package as;
import java.util.Scanner;

public class askisii {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        String stA;
        // 初始化最长子串为空,初始最长长度为0
        String longestSub = "";
        int maxLen = 0;
        int i,j,p1,p2;
        System.out.println("Give a string:");
        stA=scan.nextLine();
        int len = stA.length();

        for(i=0;i<len;i++) {
            for(j=i+1;j<len;j++) {
                p1 = i;
                p2 = j;
                int currentLen = 0;
                StringBuilder currentSub = new StringBuilder();
                // 先判断下标不越界,再比较字符
                while(p1 < len && p2 < len && stA.charAt(p1) == stA.charAt(p2)) {
                    currentSub.append(stA.charAt(p1));
                    currentLen++;
                    p1++;
                    p2++;
                }
                // 只有当前子串长度大于历史最长时才更新,子串长度至少为2才符合重复出现要求
                if(currentLen > maxLen && currentLen >=2) {
                    maxLen = currentLen;
                    longestSub = currentSub.toString();
                }
            }
        }

        System.out.println("Longest substring:" + longestSub);
        System.out.println("Longest substring size:" + maxLen);
        scan.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:18:01