0
所以,我試圖做一個函數,它將訪問一個頁面,獲取一個項目的ID和TYPE,然後訪問一個鏈接並插入ID和TYPE以獲得ITEM NAME 。然後它會將所有這些添加到ArrayList中。新列表(id,type,name);Java正則表達式,帶變量的多表達式
public static ArrayList<Kad> getDetails(final String strHTML, final String strHTML2) {
final ArrayList<Kad> kads = new ArrayList<Kad>();
try {
final Pattern regex = Pattern
.compile(
"id=(\\d+)\\&tab=([a-zA-Z]+)",
Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
final Pattern regex2 = Pattern
.compile(
"font-weight:bold; font-size:11px;\">([\\w\\s]+)</div>",
Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
final Matcher regexMatcher = regex.matcher(strHTML);
final Matcher regexMatcher2 = regex2.matcher(strHTML2);
String ids = "";
while (regexMatcher.find() && regexMatcher2.find()) {
final int id = Integer.parseInt(regexMatcher.group(1));
final String tab = regexMatcher.group(2);
final String name = regexMatcher2.group(1);
if (!ids.contains(id + "|") && !ignoreList.contains(id)) {
kads.add(new Kad(id,tab,name));
ids += id + "|";
}
}
return kads;
} catch (final Exception ex) {
ex.printStackTrace();
}
return new ArrayList<Kad>();
}
此代碼用於獲取項目的ID,類型和名稱。但是,由於此函數獲取ID和名稱,我無法獲取ID列表。將其分解爲兩個函數(其中一個獲得ID和TYPE),然後另一個獲取名稱的最佳方法是什麼?
此方法使用名爲:
data = wrapper.post("LINK1", "tab=" + "food" + "&page=" + "1", "");
data2 = wrapper.post("LINK2", "tab=" + "CURRENT ITEM TYPE IN LIST GOES HERE" + "&id=" + "CURRENT ITEM ID IN LIST GOES HERE", "");
final ArrayList<Kad> kadList = Kad.getDetails(data, data2);
我試圖打破它分成兩個不同的方法,但無法弄清楚如何在方法2中找到的名稱添加到ID的已創建的列表和TYPE在方法1中。
編輯:好的,所以在下面的建議解決方案後,我現在可以在兩個獨立的方法中獲取id和名稱。現在的問題是方法2(獲取名稱方法)是給每個單一的ID相同的名稱(搜索的第一個名稱)。我如何解決這個問題?
public static ArrayList<Kad> findItemName2(final int id, final String tab, final String strHTML) {
final ArrayList<Kad> names = new ArrayList<Kad>();
try {
final Pattern regex = Pattern
.compile(
"font-weight:bold; font-size:11px;\">([\\w\\s]+)</div>",
Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
final Matcher regexMatcher = regex.matcher(strHTML);
String ids = "";
while (regexMatcher.find()) {
final String name2 = regexMatcher.group(1);
if (!ids.contains(name2 + "|")) {
names.add(new Kad(id,tab, name2));
name = name2;
ids += name2 + "|";
}
}
return names;
} catch (final Exception ex) {
ex.printStackTrace();
}
return new ArrayList<Kad>();
}
所以,你讓我一直到第4步。「在這些方法1和方法2裏面」是我不理解的一點。 – user1508174 2014-10-18 06:56:20
此外,我很困惑我將如何拉出ArrayList中的特定「Kad」來追加名稱?相當多的方法1將獲得所有的ID和類型,並將它們投入ArrayList,它將輸出如下所示的內容:{9:food,10:food,11:food},我需要運行method2來追加(for例如ID 9)它在ArrayList中的條目名稱,因此它讀取:{9:food:NAME} – user1508174 2014-10-18 07:13:53
嘗試在方法一和方法二中的兩個列表中組裝數據。一個'id'和'type'的列表,另外一個'name'。一旦你有這些列表,然後從這些列表中讀取數據,以創建'Kads'對象並準備'kads' arraylist。 – Tirath 2014-10-18 07:52:41