Java报错String index out of range:含义及代码问题排查咨询
关于Java中"String index out of range"错误的解析及代码修复
兄弟,先给你明确说:这个报错绝对不是因为字符串长度过长,而是你的代码里访问了字符串不存在的索引位置!Java里字符串的索引是从0开始计数的——比如一个长度为n的字符串,最后一个字符的索引是n-1,如果你直接用n(也就是s.length())去访问字符,自然就超出合法范围了,这就是报错的根源。
接下来看你的代码,核心问题出在这几个地方:
- 你多次写了
s.charAt(s.length()),比如第一个判断条件if(s.charAt(0) == s.charAt(s.length())),还有返回语句里的s.charAt(s.length()),这都是错误的写法,要访问最后一个字符,必须改成s.charAt(s.length()-1)。 - 还有个小优化点:
s.substring(1,s.length())其实可以简化成s.substring(1),因为substring的第二个参数如果省略,默认就是字符串的末尾,效果完全一致。
另外我还帮你补了一个更严谨的长度判断——如果字符串长度小于2(比如空字符串或单个字符),直接返回"incompatible",避免极端情况下可能出现的索引问题。
给你修复后的完整代码:
public class Program { public static String flipEndChars(String s) { // 先处理极端长度情况,避免后续索引越界 if(s.length() < 2){ return "incompatible"; } if(s.charAt(0) == s.charAt(s.length()-1)){ return "Two's a pair."; } else if(s.length() < 3){ return "incompatible"; } else { return s.charAt(s.length()-1) + s.substring(1) + s.charAt(0); } } }
总结一下:这个报错完全是代码里的索引使用错误导致的,和字符串本身长度无关,把访问最后一个字符的索引改成s.length()-1,再补上极端长度的判断,问题就解决了。
内容的提问来源于stack exchange,提问作者young hwc
相关产品推荐
相关产品推荐

