我正在使用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());
}
}
}
答案 0 :(得分:-1)
看来你正在尝试存储字符串是HashMap中的键值对。但是,您的HashMap未设置为存储字符串。
从
修改HashMapMap<Set<String>, Set<String>> map = new HashMap<Set<String>, Set<String>>();
到
Map<String, String> map = new HashMap<String, String>();
这将解决您的问题