我寫的代碼使用jsoup去一個站點,查看所有段落標題,然後將它們保存到名爲headingList
的ArrayList。這是棘手的部分。我有一個將Strings作爲鍵和ArrayLists作爲值的映射。該代碼的設計方式要求它轉到多個頁面。正因爲如此,標題金額可能與標題相關的段落金額大不相同。所以,這裏的想法是創建兩個int值。一個名爲headingAmt
的int值在查看頁面並確定有多少個標題後設置。第二個int值叫做headCount
被初始化爲1,然後我要做的就是設置一個while循環,如下所示:while(headCount != headAmt + 1)
並在循環結束時增加它,以便在headCount
通過每個標題時終止。在while循環中,我試圖通過並將每個段落添加到名爲items
的ArrayList,然後獲取items arrayList中的內容,然後將其設置爲地圖中第一項的值。然後,清除ArrayList,轉到下一個段落,保存items
中的內容,然後將該ArrayList設置爲地圖中第二個項目的值,依此類推。我有我可以發佈的代碼,但由於我無法正常工作,因此有問題的while循環被重新安排了很多次,這讓人感到困惑。Jsoup ArrayList和LinkedHashMap組合
編輯下面的情況下,任何人的代碼可以幫助:
public class Finder {
public Finder(String url) {
String mainURL = "http://www.website.com";
Map<String, List<String> > headMap = new HashMap<>();
ArrayList<String> headingList = new ArrayList<>();
ArrayList<String> items = new ArrayList<>();
int headCounter = 1;
String itemList = "div > div:nth-child(1).category > ul:nth-child(2) > li.item > span";
int headAmt;
Document doc1 = null;
///// Connect to site to get menu /////
try{
doc1 = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36")
.referrer("http://www.google.com")
.get();
}
catch(IOException e){
System.out.println("Can't connect to website");
}
/////// Get headings ////////
Elements head = doc1.select("div > div > div > h3");
////// Loop through headings and add to ArrayList /////
for(Element e: head){
headingList.add(e.text());
}
headAmt = headingList.size();
/*
Here is the problem
*/
while(headCounter != headAmt + 1){
Elements elem = doc1.select("div > div:nth-child("+ headCounter +").category > ul:nth-child(2) > li.item > span");
for (String key : headingList) {
for(Element e : elem){
items.add(e.text());
}
List<String> value = new ArrayList<>(items);
headMap.put(key, value);
}
items.clear();
headCounter++;
}
}
}
}
}
我發佈的代碼 - 沒有得到掛在去年while循環。我知道這是錯誤的,我只是需要幫助修復它 –
對不起,我恢復了代碼回到我的,但它仍然無法正常工作。任何幫助表示讚賞。我在這裏拉我的頭髮。 –
@GD我編輯了我的答案。 – Titus