过去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
但仅在第三或第四次传球时,从不第一次或第二次。 困惑。
答案 0 :(得分:3)
sb.deleteCharAt(inputString.length());
应该是
sb.deleteCharAt(inputString.length() - 1);
因为你想删除最后一个字符(你在测试中正确地做了!)
答案 1 :(得分:0)
您要删除StringBuilder
长度的最后一个字符,而不是长度 -
StringBuilder
与Java中的所有String
和数组表示不同,是0索引的。
请改用以下习语:
sb.deleteCharAt(sb.length() - 1);
StringIndexOutOfBoundsException
仅在执行中被任意抛出的原因可能是因为]
字符的条件检查,这可能并不总是成立(因此违规代码不会执行)