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
相关产品推荐
相关产品推荐

