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

Java报错StringIndexOutOfBoundsException:-1,substring参数合规仍报错求解

为啥你的字符串交换方法会抛出-1索引越界异常?

嘿,我来帮你捋清楚这个问题!首先得先搞懂Java里String.substring()的规则——这个方法的两个参数是起始索引(包含)和结束索引(不包含),而且必须满足0 ≤ 起始索引 ≤ 结束索引 ≤ 字符串长度,不然就会触发异常。

你说传入的是"code"(长度4),但还是触发了StringIndexOutOfBoundsException: -1,最大的可能性是你把substring的两个参数写反了!

比如如果你不小心写成了:

str.substring(str.length()-1, 1)

对"code"来说,str.length()-1是3,这时候起始索引是3,结束索引是1,明显起始比结束大。Java这时候会计算要截取的长度为1-3=-1,直接就抛出你看到的那个异常了。

而正确的写法应该是你原本想的:

str.substring(1, str.length()-1)

对"code"来说,这个调用会截取索引1到3(不包含3)的子串,也就是"od",完全在合法范围内,不会出问题。

另外还要提醒你,得处理边界情况:如果传入的字符串是空串或者只有一个字符(比如""或者"a"),str.length()-1会变成0或者-1,这时候调用substring(1, str.length()-1)也会触发同样的异常。所以你的方法最好加个前置判断:

public static String swapFirstLast(String str) {
    // 空串或单字符直接返回,不用交换
    if (str == null || str.length() <= 1) {
        return str;
    }
    char firstChar = str.charAt(0);
    char lastChar = str.charAt(str.length() - 1);
    // 拼接首尾交换后的字符串
    return lastChar + str.substring(1, str.length() - 1) + firstChar;
}

这样不管传入啥合法字符串,都不会再出索引越界的问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:18:06