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

Java短语转猪拉丁语代码报IndexOutOfBoundsException异常怎么解决

问题原因及修复方案

你的IndexOutOfBoundsException异常确实和主方法中步长变量m的逻辑错误直接相关,同时extractWord方法也存在隐藏的越界风险,具体问题和修复方案如下:

1. 步长m的逻辑错误

你在处理完单词后,步长m的赋值逻辑完全不符合遍历原字符串的需求:

  • 转换后的猪拉丁语字符串tr的长度和原单词长度没有对应关系,用tr.length()-1计算步长会导致i的增量完全偏离原字符串的实际字符位置
  • 写死的1、2长度判断也没有意义,原单词长度不一定只有1、2两种情况
    多次错误累加后i会超出原字符串phrase的长度范围,此时调用phrase.charAt(i)就会触发你遇到的越界异常。

修复方案:处理完一个单词后,步长直接取原单词的长度即可,替换原else分支中m的赋值逻辑:

// 删掉原有的if(w.length()==2)等判断逻辑,直接替换为下面一行
m = w.length();

2. extractWord方法的隐藏问题

你当前的extractWord存在两个缺陷:

  • 如果从传入位置i到字符串末尾全是字母,第二个循环结束后end还是初始值0,调用substring(start, end)会直接抛出索引越界异常
  • 如果从字符串开头到位置i全是字母,虽然当前默认start=0刚好符合需求,但逻辑上没有显式兜底,后续调整初始值容易出问题

修复后的代码如下:

public String extractWord(int i){
    String word = text;
    int start = 0;
    // 初始end设为字符串长度,兜底后面全是字母的情况
    int end = word.length();

    for (int n = i; n >= 0; n--){
        if (!Character.isLetter(word.charAt(n))) {
            start = n + 1;
            break;
        }
    }
    for (int n = i+1; n < word.length(); n++){
        if (!Character.isLetter(word.charAt(n))){
            end = n;
            break;
        }
    }
    return word.substring(start,end);
}

额外优化提示

你当前在转换后的单词后额外拼接了空格,会导致原字符串中的标点、空格位置出现多余空格,可后续根据需求调整拼接逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:12:04