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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:26