奇怪的(?)在数组上与Stringuilder结合

时间:2015-10-05 09:26:48

标签: java arrays stringbuilder

过去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

但仅在第三或第四次传球时,从不第一次或第二次。 困惑。

2 个答案:

答案 0 :(得分:3)

sb.deleteCharAt(inputString.length());

应该是

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

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

答案 1 :(得分:0)

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

StringBuilder与Java中的所有String和数组表示不同,是0索引的。

请改用以下习语:

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

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