-5
我使用jsoup解析HTML頁面並提取與這些鏈接對應的鏈接和文本。避免結果中出現重複元素
我將鏈接作爲值和文本存儲爲Map中的鍵。默認情況下,地圖不應該允許我輸入重複的元素,但在這裏 我在結果中獲取重複的元素。
任何人都可以幫我解決這個問題嗎?這是我的代碼。
public class ParseHtmlStrInHashMap {
public static String linkText;
public static String linkHref;
public static int i = 1;
public static Map<Set<String>, Set<String>> pageURLsAndText(Set<String> linkText, Set<String> linkHref) {
Map<Set<String>, Set<String>> map = new HashMap<Set<String>, Set<String>>();
map.put(linkText, linkHref);
return map;
/*for(Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("Key = "+entry.getKey()+", value = "+entry.getValue());
}*/
}
public static void main(String[] args) {
//ParseHtmlStrInHashMap phtml = new ParseHtmlStrInHashMap();
Document doc = null;
try {
doc = Jsoup.connect("URL").get();
} catch (IOException e) {
e.printStackTrace();
}
Elements links = doc.select("a[href]");
for (Element link : links) {
linkHref = link.attr("abs:href");
linkText = link.text();
if(linkText.isEmpty()) {
/*linkText = "Amazon"+i;
i++;*/
if(linkHref.contains("=")) {
String arr[] = linkHref.split("=");
int j = arr.length-1;
linkText = arr[j];
}
else {
String arr[] = linkHref.split("/");
int j = arr.length-1;
linkText = arr[j];
}
}
Set<String> setHref = new HashSet<String>();
Set<String> setText = new HashSet<String>();
setHref.add(linkHref);
//setText.add(linkText);
if(setText.contains(linkText)) {
linkText = linkText.concat(String.valueOf(i));
i++;
setText.add(linkText);
}
else {
setText.add(linkText);
}
//System.out.println("Text = "+linkText+", URL = "+linkHref);
Map<Set<String>, Set<String>> map = pageURLsAndText(setText, setHref);
for(Map.Entry<Set<String>, Set<String>> entry : map.entrySet()) {
System.out.println("Key = "+entry.getKey()+", value = "+entry.getValue());
}
}
}
這將有助於[減少樣本代碼,並顯示輸入和預期的輸出] (http://stackoverflow.com/help/mcve)。 – yasd