2015-11-06 54 views
-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()); 
    } 
} 
} 
+4

這將有助於[減少樣本代碼,並顯示輸入和預期的輸出] (http://stackoverflow.com/help/mcve)。 – yasd

回答

-1

看起來您正在嘗試存儲字符串是您的HashMap中的鍵值對。然而,你的HashMap沒有設置存儲字符串。

Map<Set<String>, Set<String>> map = new HashMap<Set<String>, Set<String>>(); 

修改HashMap來

Map<String, String> map = new HashMap<String, String>(); 

這將解決您的問題

+0

嗨Kabir,謝謝你的回覆。我嘗試了你告訴我的方式,但即使這給了我重複的鑰匙..只是嘗試與亞馬遜作爲網址.. –