奇怪(?)超出 - 与数组上的 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
只是在你的执行中被任意抛出的原因可能是因为 ]
字符的条件检查,这可能并不总是成立(因此有问题的代码不会执行).
最近 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
只是在你的执行中被任意抛出的原因可能是因为 ]
字符的条件检查,这可能并不总是成立(因此有问题的代码不会执行).