【发布时间】:2016-07-24 09:02:20
【问题描述】:
当在迭代(inside for)中使用 12 时,它会正确输出,当将 13 分配给迭代器(inside for)时会在行上抛出 IndexOutOfBoundsException
imageUrl[i]=images.select("img").get(i).absUrl("data-original");`.
注意: hasClass("lazy") 中的惰性类有12个元素:
Elements headlines = document.select("div.newscat a[href] h3");
Elements images=document.select("div.newscat").select("a[href]");
int lengthHeadline = headlines.size(); // outputs 13
String[] newsHeadline=new String[lengthHeadline];
String[] imageUrl=new String[lengthHeadline]
for(int i=0; i<12; i++){
if (images.get(i).children().hasClass("lazy")){
imageUrl[i] = images.select("img").get(i).absUrl("data-original");
}else{
imageUrl[i] = "http://something.com/8046.png";
}
System.out.println(imageUrl[i]);
}
编辑:
HTML 代码
在这里,我假设有 n 个 .newscat 类,每个类都包含图片和标题,但在某些情况下,它们不包含图像而只有标题,因此我想显示任何其他图像,而不是空白显示。所以我的图像数组应该算出标题。
我想要显示的视图(类似的)。
【问题讨论】:
-
我猜这是崩溃的部分:"images.select("img").get(i).absUrl("data-original");"所以你的“img”元素可能没有 13 个元素?
-
我不确定这里有什么奇怪的。如果数组/列表有 12 个元素,则意味着第一个元素用 0 索引,最后一个元素用 11 索引(长度或大小减 1,因为索引从 0 开始)。因此,如果您将循环限制为 13,那么最后一个可能的非 13 值将是 12,它仍然大于最后一个元素的索引。无论如何,您的问题有点奇怪,因为您声称它的
lazy类有 12 个元素(无论这意味着什么),但您没有在代码中选择任何这些元素。 -
@Pshemo 嗨,感谢您的评论,也许您跳过了我在行
int lengthHeadline = headlines.size(); String[] imageUrl=new String[lengthHeadline]上创建 13 元素数组的点。这里的标题由 13 个元素组成 -
您似乎没有意识到
[i]不仅是受某些限制的地方。还有get(i)。尝试打印images.select("img").size()的结果很可能是 12。 -
我知道这一点。但仔细看看那条线。您在 两个 处使用
i:[i]和get(i)。两者都受到一些界限的限制,这些界限不需要相等。
标签: android jsoup indexoutofboundsexception