我需要一些帮助。
我有一个字符串数组(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;
}
任何帮助都将不胜感激。
提前致谢。
答案 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]);
...
}