通过for循环使用url链接填充字符串数组

时间:2016-10-24 17:07:55

标签: java android arrays jsoup

我需要一些帮助。

我有一个字符串数组(urllinks),我想用 url links 来填充,这些链接通过for循环用jsoup解析。

在下面的代码示例中,有 2 个网址,但列表只会填充第一个链接。我不知道将解析多少链接,可以是1但也是12。

public static String[] urllinks;

...

for (int i = 0; i < links.size(); i++) {    // links size = 2  
    String url = doc.select("a").attr("abs:href");
    urllinks[i] = url;

}

任何帮助都将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:3)

您的问题是由于您在doc.select("a")上调用attr("abs:href")而返回类型为Elements的对象,以便您始终获得javadoc中所述的第一个匹配项:< / p>

  

第一个匹配的元素获取属性值   属性。

你宁愿迭代为下一个:

List<String> urls = new ArrayList<>();
// Iterate over all the links that have an attribute abs:href
for (Element link : doc.select("a[abs:href]")) {
    urls.add(link.attr("abs:href"));
}
urllinks = urls.toArray(new String[urls.size()]);

答案 1 :(得分:0)

为了回答我自己的问题,我通过创建一个arraylist然后将其转换回字符串数组来解决它。 很脏,但它有效。

{
  private static String[] urllinks;
  private static ArrayList<String> mStringList = new ArrayList<>();
  ...

  int i = 0;
  for (Element el : links) {
       String url = el.attr("abs:href");
       if (url != null) {
                mStringList.add(i, url);
                i++;
            } 
       else {
          // Do something
       }

  urllinks = mStringList.toArray(urllinks);
  // check if urls are actualy in string array
  Log.d("LINK 1", urllinks[0]);
  Log.d("LINK 2", urllinks[1]);
...
}