Jsoup代码为何仅打印半数结果?48组图与标题仅输出48行
问题分析与解决方案
嘿,我一眼就瞅出问题所在了——你的循环里重复递增了变量i,这直接导致输出行数减半!
先看看你这段代码的关键部分:
for (i = 0; i < j; i++) { if (!imageElement.get(i).attr("abs:src").isEmpty()) { imagesSource[i] = imageElement.get(i).attr("abs:src"); titlesSource[i] = titleElement.get(i).attr("title"); System.out.println(imagesSource[i]); System.out.println(titlesSource[i]); } else { imagesSource[i] = imageElement.get(i).attr("abs:image-src"); titlesSource[i] = titleElement.get(i).attr("title"); System.out.println(imagesSource[i]); System.out.println(titlesSource[i]); } i++; // 这里就是多余的罪魁祸首! }
问题拆解:
你的for循环已经在循环头部声明了i++,这意味着每次循环结束后i会自动加1。但你在循环体的最后又手动加了一句i++;,这就导致每次循环i都会增加2。
原本你有48个图片和标题,正常循环应该执行48次,每次打印2行(图片+标题),总共96行。但现在循环只执行了24次,24×2=48行,正好是你看到的结果。而单独打印标题时,你可能去掉了这个多余的i++,所以循环能正常跑48次,输出48行。
修正方案:
只需要删掉循环体末尾那行多余的i++;就行,修正后的代码如下:
for (i = 0; i < j; i++) { if (!imageElement.get(i).attr("abs:src").isEmpty()) { imagesSource[i] = imageElement.get(i).attr("abs:src"); titlesSource[i] = titleElement.get(i).attr("title"); System.out.println(imagesSource[i]); System.out.println(titlesSource[i]); } else { imagesSource[i] = imageElement.get(i).attr("abs:image-src"); titlesSource[i] = titleElement.get(i).attr("title"); System.out.println(imagesSource[i]); System.out.println(titlesSource[i]); } // 删掉这里的i++! }
额外优化建议:
你可以把重复的打印和赋值逻辑抽出来,减少代码冗余,让代码更整洁:
for (i = 0; i < j; i++) { // 统一处理图片地址 String imgSrc = imageElement.get(i).attr("abs:src"); if (imgSrc.isEmpty()) { imgSrc = imageElement.get(i).attr("abs:image-src"); } // 统一处理标题 String title = titleElement.get(i).attr("title"); // 赋值并打印 imagesSource[i] = imgSrc; titlesSource[i] = title; System.out.println(imgSrc); System.out.println(title); }
内容的提问来源于stack exchange,提问作者Zishan
相关产品推荐
相关产品推荐

