对象未添加到列表中,列表返回空

时间:2019-04-17 18:44:04

标签: java for-loop arraylist jsoup

我正在从网站上检索数据,当我检索数据(字符串)时,就会显示国家/地区

for (Element row : document.select("table.sortable.wikitable tr")) {

                if (row.select("td:nth-of-type(1)").text().equals("")) {
                    continue;

                }
else {
String name = row.select("td:nth-of-type(1)").text();
System.out.println(name);

}

这已经给了我控制台中的国家列表,现在我已经确认我已经获得了要使用列表将每个国家插入到单独国家对象中的国家

final String url = "https://en.wikipedia.org/wiki/List_of_sovereign_states";
        List<Country> countries = new ArrayList<>();
        try {
            final Document document = Jsoup.connect(url).get();

            for (Element row : document.select("table.sortable.wikitable tr")) {

                if (row.select("td:nth-of-type(1)").text().equals("")) {
                    continue;

                } else {
                    for (Country country : countries) {

                        country.setCountry(row.select("td:nth-of-type(1)").text());


                        countries.add(country);

                    }

                }
            }
            System.out.println(countries);
        }

当我打印列表时,列表为空

[]

3 个答案:

答案 0 :(得分:2)

您正在呼叫Country country : countries,要在其中将新国家/地区添加到列表中,默认情况下countries不包含任何值,因此它将遍历具有0个值的列表,并且不执行任何操作。您尚未将新国家/地区添加到countries列表中的任何地方。

您可能打算执行以下操作,在其中创建Country的新实例:

if (row.select("td:nth-of-type(1)").text().equals("")) {
    continue;
} else {
    Country country = new Country();
    country.setName(row.select("td:nth-of-type(1)").text());
    countries.add(country);
}

(以上代码假设td:nth-of-type(1)包含国家/地区名称,但仅是示例)

答案 1 :(得分:2)

问题在这里:

else {
    for (Country country : countries) {
        country.setCountry(row.select("td:nth-of-type(1)").text());
        countries.add(country);
    }
}

考虑一下代码在做什么。按下else框时,您将在国家列表中循环浏览,然后在。 。 。创建一个新国家的次数是您列表中现有国家的次数。但是由于列表开始为空,因此该循环将永远不会执行。

解决方案很简单。完全摆脱循环,只需执行以下操作:

else {
    Country country = new Country();
    country.setCountry(row.select("td:nth-of-type(1)").text());
    countries.add(country);
}

答案 2 :(得分:0)

您要遍历国家/地区列表,而不是创建新的Country对象。 正如我们的同事所提到的,您应该首先创建Country对象的实例,设置其字段,然后将其包括在列表中。我将扩展示例并将国家/地区名称移至其构造函数,以防止出现空指针。

else {
    String countryName = row.select("td:nth-of-type(1)").text();
    Country country = new Country(countryName);
    countries.add(country);
}