将ArrayList拉入相同类型的2D ArrayList时出现索引超出范围错误

问题描述 投票:0回答:1

我有一个要抓取的html元素数组,需要添加到多维arrayList中以创建基本数据表。基本上,我有一个221 x 12元素的Web表,需要逐行添加(每行12个元素)。我有一个循环设置,通过xpath在行中查找每个元素,然后将它们添加到称为解析器的数组中。现在,我需要通过循环的每次迭代将解析器添加到名为data的多维arrayList中。当执行此操作时,我调用get和addAll,但出现索引超出范围错误。

我的假设是我没有在外部数组上正确初始化行,但是我不确定如何在内部数组中添加其他内容。我尝试删除get参数,但是当我这样做时,我收到类型参数编译错误。我还尝试使用空值1st初始化外部数组,但这仅用空值填充了数组。

我将添加所有元素为字符串,如果出于任何原因而重要(https://www.worldometers.info/coronavirus/),则为源。如果多维ArrayList并不是最好的方法,那么我也会接受其他选择。

这是我所拥有的:

public void elementLocator() {
ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
try {
                String prefix = "//*[@id=\"main_table_countries_today\"]/tbody[1]/tr[";
                int j = 0;
                for(int i = 1; i <= 222; i ++) {
                    try {
                        ArrayList<String> parser = new ArrayList<String>();
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[1]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[2]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[3]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[4]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[5]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[6]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[7]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[8]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[9]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[10]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[11]")).getText());
                        parser.add(driver.findElement(By.xpath(prefix + i + "]/td[12]")).getText());
                        data.get(0).addAll(j, parser); //Runtime error here
                        j++;
                        System.out.println(j);
                    //Skip blank rows
                    } catch (Exception e) {
                        j++;
                        e.printStackTrace();;
                        continue;
                    }
                    System.out.println(data);
            }
            Thread.sleep(3000);
            closeBrowser();
        //Catch specific exception for html element not found
        } catch (NoSuchElementException e) {
            System.out.println("Selected element not found");
            error = true;
java arraylist multidimensional-array
1个回答
0
投票

您调用data.get(0),但数据为空,因此出现OutOfBounds异常。您需要将数组添加到这样的数据中:data.add(parser)

© www.soinside.com 2019 - 2024. All rights reserved.