“线程中的异常”;“主要”;java.lang.IndexOutOfBoundsException:索引:23,大小:22

“线程中的异常”;“主要”;java.lang.IndexOutOfBoundsException:索引:23,大小:22,java,Java,我正在解析文本文档中的pdf文件,以便稍后创建JSON数组 我正在尝试处理一个arrayList,以便在出现这种情况时(如果出现错误,则说明该情况尚未发生)向其添加类似于标记的内容。循环正在运行21次,直到出现错误。在这种情况下,等于方向字符串的preveElement字符串在错误发生之前被输入一次,因此我不理解为什么会出现此错误,因为它之前已经输入,并且所有变量都匹配 bufferDirection有130个字符串 我怎样才能修好它 谢谢你的帮助 第一次输入if(previdelement.e

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

我正在尝试处理一个arrayList,以便在出现这种情况时(如果出现错误,则说明该情况尚未发生)向其添加类似于
标记的内容。循环正在运行21次,直到出现错误。在这种情况下,等于
方向
字符串的
preveElement
字符串在错误发生之前被输入一次,因此我不理解为什么会出现此错误,因为它之前已经输入,并且所有变量都匹配

bufferDirection
有130个字符串

我怎样才能修好它

谢谢你的帮助

第一次输入if(previdelement.equals(direction))时

出现错误前的第二次:

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

                    }

                }

            }

出现错误之前目录数组的内容:

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

                    }

                }

            }

ArrayList direcArray=new ArrayList();
布尔dontAdd=true;
对于(int i=0;i
将循环的上限更改为

i < bufferDirection.size() - 1
i

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

将循环的上限更改为on

i < bufferDirection.size() - 1
i

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

将循环的上限更改为on

i < bufferDirection.size() - 1
i

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

将循环的上限更改为on

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

问题是

direcArray.add(i + 1, addElem);
您尝试将
addElem
添加到索引
i+1
但是
direcArray
的大小小于
bufferDirection
,并且当时存在
问题

direcArray.add(i + 1, addElem);
您尝试将
addElem
添加到索引
i+1
但是
direcArray
的大小小于
bufferDirection
,并且当时存在
问题

direcArray.add(i + 1, addElem);
您尝试将
addElem
添加到索引
i+1
但是
direcArray
的大小小于
bufferDirection
,并且当时存在
问题

direcArray.add(i + 1, addElem);
您尝试将
addElem
添加到索引
i+1

但是
direcArray
的大小小于
bufferDirection
,此时存在
问题是您在23号位置而不是22号位置添加。使用额外的索引j保留数组列表中的下一个位置。

问题是您在23号位置而不是22号位置添加。使用额外的索引j保留t中的下一个位置他是arraylist。

问题是你在23号位置而不是22号位置添加。使用额外的索引j来保持arraylist中的下一个位置。

问题是你在23号位置而不是22号位置添加。使用额外的索引j来保持arraylist中的下一个位置。

问题是你试图将一个元素添加到一个它不在的位置在
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);
}

问题在于,您试图将一个元素添加到一个不在
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);
}

问题在于,您试图将一个元素添加到一个不在
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);
}

问题在于,您试图将一个元素添加到一个不在
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);
}

不相关,但打电话给某个人