避免结果中出现重复元素

时间:2015-11-06 05:32:27

标签: java

我正在使用jsoup解析HTML页面并提取与这些链接相对应的链接和文本。

我将链接作为值和文本存储为Map中的键。默认情况下,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());
   }
 }
}

1 个答案:

答案 0 :(得分:-1)

看来你正在尝试存储字符串是HashMap中的键值对。但是,您的HashMap未设置为存储字符串。

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

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

这将解决您的问题