线程" main"中的例外情况java.lang.IndexOutOfBoundsException:索引:23,大小:22

时间:2015-06-09 16:54:28

标签: java

我正在解析文本文档中的pdf文件,以便稍后创建JSON数组。

我正在尝试处理一个arrayList,以便在发生这种情况时向其中添加类似marker的内容(其中出现错误的情况仍未发生)。循环运行21次,直到发生错误。在错误发生之前输入prevElement字符串等于direction字符串的情况,因此我不明白为什么会出现此错误,因为它之前已经输入过,而且变量匹配。

bufferDirection有130个字符串。

我该如何解决?

我感谢任何帮助。

第一次输入if(prevElement.equals(方向))

enter image description here

错误出现之前的第二次:

enter image description here

出现错误之前direcArray的内容:

enter image description here

        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");

                    }

                }

            }

4 个答案:

答案 0 :(得分:2)

将for循环的上限更改为

i < bufferDirection.size() - 1

在循环中,您正在访问将抛出异常的元素i + 1; i本身将到达数组的最后一个索引,因此i + 1将使其超出范围。

答案 1 :(得分:1)

问题是

direcArray.add(i + 1, addElem);

您尝试将addElem添加到索引i + 1direcArray的大小小于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);
}