为什么以下异常显示-4索引而不是-1?

我正在尝试从字符串中获取子字符串。我编写了提供开始索引和结束索引的逻辑,但低于异常。代码是:

final int startIndex = header.indexOf(startValue + ":")
                + (startValue + ":").length();
final int endIndex = header.indexOf(endValue + ":");
return header.substring(startIndex, endIndex).trim();

例外:

'字符串索引超出范围:-4' java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-4 在 java.lang.String.substring(String.java:1967)

任何帮助,将不胜感激。

回答

的相关代码substring为:

1965    int subLen = endIndex - beginIndex;
1966    if (subLen < 0) {
1967        throw new StringIndexOutOfBoundsException(subLen);
1968    }

如果您-4在异常消息中看到,这意味着endIndex - beginIndex == -4.

显然,endIndex应该大于或等于beginIndex,这样差异就不会是负数。

查看完整方法(此版本的代码似乎与您的版本匹配,基于行号 - 1967 - 其中抛出异常):

public String substring(int beginIndex, int endIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    if (endIndex > value.length) {
        throw new StringIndexOutOfBoundsException(endIndex);
    }
    int subLen = endIndex - beginIndex;
    if (subLen < 0) {
        throw new StringIndexOutOfBoundsException(subLen);
    }
    return ((beginIndex == 0) && (endIndex == value.length)) ? this
            : new String(value, beginIndex, subLen);
}

你可以看到-1如果beginIndex是,你会得到错误消息-1

但是如果beginIndex是非负数,并且endIndex不是太大,则您在异常消息中得到的数字是endIndex - beginIndex


以上是为什么以下异常显示-4索引而不是-1?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>