这是我第一次涉足Java,所以请原谅我,如果这很简单,但是我很难遍历列表并用列表项填充字符串数组。
具体来说,我使用Jsoup来解析网址并提取某些元素:
Document doc = Jsoup.connect(content).get();
Elements threads = doc.getElementsByClass("page-link");
for (Element src : threads){
String title = src.text();
String href = src.attr("href");
THREADS[0] = title;
}
THREADS是一个字符串数组:
static final String[] THREADS = new String[] {};
我似乎无法遍历Elements数组并使用标题值填充THREADS。在上面的示例中保留THREADS[0]
索引,成功地将最终标题值推送到字符串[]中,如预期的那样。但是在for(i=0;i<25;i++)
语句周围使用THREADS[i] = title;
类型的循环会导致Android应用程序中的强制关闭。
任何提示都会很棒。
答案 0 :(得分:3)
您已经创建了一个零元素数组,并且数组不可调整大小。您是否有任何特殊原因要求您使用List<String>
?
static final List<String> THREADS = new ArrayList<String>();
// ...
for (Element src : threads){
String title = src.text();
String href = src.attr("href");
THREADS.add(title);
}
答案 1 :(得分:2)
你必须初始化你的数组:
static final String[] THREADS = new String[25];
当然,您实际上并不是for(i=0;i>25;i++)
而是渴望for(i=0;i<25;i++)
,请参阅<
>
中的差异。
甚至更好,因为@Matt Ball建议使用List<String>
。
答案 2 :(得分:2)
Java数组的大小在创建时是固定的:当您在其中添加元素时,它们不会自动增长。
如果您事先知道要放入的元素数量,则可以使用该大小创建数组。在你的情况下,像:
String[] THREADS = new String[threads.size()]; int i = 0; for (Element src : threads) { String title = src.text(); String href = src.attr("href"); THREADS[i++] = title; }
然而,在Java中使用数组并不是非常惯用,因为它们不是很灵活(它们在键入时还有其他问题)。使用java.util
中的众多集合类型之一更为常见。 List
接口及其ArrayList
实现提供了您想要的“可扩展的元素数组”:
List<String> THREADS = new ArrayList<String>(); for (Element src : threads) { String title = src.text(); String href = src.attr("href"); THREADS.add(title); }