奇怪(?)超出 - 与数组上的 Stringuilder 绑定

Strange(?) out - of - bound with Stringuilder on array

最近 2 天我 100% 脑死亡,无法找到错误所在...谁能给我提示 >>

for(String inputString : word)
{
    StringBuilder sb = new StringBuilder(inputString);

    if(inputString.charAt(inputString.length()-1) == ']')
    {
        sb.deleteCharAt(inputString.length());
    }
    else if(inputString.charAt(0) == '[')
    {
       sb.deleteCharAt(0);
    }
    breaker.add(sb.toString());
}

本来应该是一个从字符串中删除 [ ] 字符的简单函数,但每次我 运行 它都会得到

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 4

但只有第三次或第四次传球,而不是第一次或第二次传球。 使困惑。

sb.deleteCharAt(inputString.length());

应该是

sb.deleteCharAt(inputString.length() - 1);

因为你想删除最后一个字符(你在测试中做对了!)

您要删除 StringBuilder 长度的最后一个字符,而不是长度 - 1。

StringBuilder,与 Java 中的所有 String 和数组表示一样,是从 0 开始索引的。

请改用以下成语:

sb.deleteCharAt(sb.length() - 1);

StringIndexOutOfBoundsException 只是在你的执行中被任意抛出的原因可能是因为 ] 字符的条件检查,这可能并不总是成立(因此有问题的代码不会执行).