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

如何用数组生成原数组逆序字符?遇索引越界报错求解答

解决字符串逆序时的"String index out of range: -1"错误

这个错误很好理解——你在代码里尝试访问字符串的负数索引了!Java里字符串的索引是从0开始的,最小合法索引是0,最大是字符串长度-1,一旦索引小于0,就会抛出这个StringIndexOutOfBoundsException。

结合你的需求和代码片段来看,大概率是你实现reverse方法时踩了这两个坑之一:

  • 没处理空字符串的情况:如果用户输入空字符串,str.length()会返回0,那str.length()-1就是-1,这时候直接用这个索引去取字符,肯定报错。
  • 循环逻辑没控制好:比如你从字符串最后一位开始往前遍历,但循环条件写错了,导致索引减到-1的时候还在执行charAt()操作。

给你两个靠谱的实现方案,你可以直接用:

方案1:手动循环实现(适合理解原理)

public static String reverse(String str) {
    // 先处理空字符串或null的情况,避免后续索引出错
    if (str == null || str.isEmpty()) {
        return str;
    }
    
    StringBuilder reversed = new StringBuilder();
    // 从最后一个字符遍历到第一个字符,确保索引始终在合法范围内
    for (int i = str.length() - 1; i >= 0; i--) {
        reversed.append(str.charAt(i));
    }
    return reversed.toString();
}

方案2:用StringBuilder自带的reverse方法(简洁高效)

Java已经帮我们封装好了字符串逆序的方法,直接用就行:

public static String reverse(String str) {
    if (str == null || str.isEmpty()) {
        return str;
    }
    return new StringBuilder(str).reverse().toString();
}

举个反例看看你之前可能写错的地方,比如这种错误写法就会触发你遇到的异常:

// 错误示例!不要这么写
public static String reverse(String str) {
    String reversed = "";
    int index = str.length() - 1;
    while (true) {
        reversed += str.charAt(index);
        index--;
        // 没判断index >=0,当index降到-1时还会执行charAt(-1)
        if (index < 0) break;
    }
    return reversed;
}

这里的问题是,先执行了charAt(index)再判断索引,当index变成-1的时候,已经触发了异常。

总之,核心就是要保证所有访问字符串的索引都在0 <= 索引 < 字符串长度这个范围内,同时别忘了处理空输入的情况~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:51:30