我正在解析文本文档中的pdf文件,以便稍后创建JSON数组。
我正在尝试处理一个arrayList,以便在发生这种情况时向其中添加类似marker
的内容(其中出现错误的情况仍未发生)。循环运行21次,直到发生错误。在错误发生之前输入prevElement
字符串等于direction
字符串的情况,因此我不明白为什么会出现此错误,因为它之前已经输入过,而且变量匹配。
bufferDirection
有130个字符串。
我该如何解决?
我感谢任何帮助。
第一次输入if(prevElement.equals(方向))
错误出现之前的第二次:
出现错误之前direcArray的内容:
ArrayList<String> direcArray = new ArrayList<String>();
boolean dontAdd = true;
for (int i = 0; i < bufferDirection.size(); i++) {
String bufferLine2 = bufferDirection.get(i);
if (bufferLine2.equals(route)) {
direcArray.add(bufferLine2);
String prevElement = bufferDirection.get(i - 1);
if (prevElement.equals(direction)) {
String addElem = bufferDirection.get(i + 1);
direcArray.add(i + 1, addElem);
} else if (!(prevElement.equals(start))) {
if (dontAdd) {
dontAdd = false;
// direcArray.add(i - 1, " ");
direcArray.add(i - 1, "New direction");
}
}
}
答案 0 :(得分:2)
将for循环的上限更改为
i < bufferDirection.size() - 1
在循环中,您正在访问将抛出异常的元素i + 1
; i
本身将到达数组的最后一个索引,因此i + 1将使其超出范围。
答案 1 :(得分:1)
问题是
direcArray.add(i + 1, addElem);
您尝试将addElem
添加到索引i + 1
但direcArray
的大小小于bufferDirection
,那时<= i
direcArray
个元素
可能你只想要:
direcArray.add(addElem);
同样,这里也会出现同样的问题
direcArray.add(i - 1, "New direction");
您需要将其更改为smt:
direcArray.add(direcArray.size() - 2, "New direction");
答案 2 :(得分:0)
问题是你在pos 23而不是22处添加。使用额外的索引j来保持arraylist中的下一个位置。
答案 3 :(得分:0)
问题是你试图在directArray
中没有添加元素的位置:
添加新元素时,您将添加2倍的值,一个在循环中,另一个在行中。这一行:
direcArray.add(i + 1, addElem);
应该是:
direcArray.add(i, addElem);
我希望它对你有帮助!
编辑:您应该在遇到问题的行中解决此问题:
if(i + 1 >= bufferDirection.size())
{
direcArray.add(i, addElem);
}
else
{
direcArray.add(i + 1, addElem);
}