【问题标题】:Duplicate Elements in HashSet JavaHashSet Java 中的重复元素
【发布时间】:2015-03-29 11:38:25
【问题描述】:

我正在创建一个通过 .edu 域进行爬网的网络爬虫。我正在使用 jsoup 解析我的 html 文件以获取锚链接。然后我将链接添加到 HashSet,因为我不想有重复的 url。但是,当我打印出我的 HashSet 时,我有几个 url 的重复项。

我将我的集合声明为成员函数

private Set <String> url = new HashSet<String>();

public void jsoupParse(String htmlFile, String baseUrl){
    try{
        File input = new File(htmlFile);
        Document doc = Jsoup.parse(input, "UTF-8", baseUrl);
        Elements links = doc.select("a[href]");
        for (Element link : links) {
            String linkHref = link.attr("abs:href");
            linkHref.trim();
            url.add(linkHref);
        }
        printCollection();
    }
    catch(IOException e){
        e.printStackTrace();
    }
}

在我的种子文件中,我有 4 个 url,所以我有 4 个 htmlFiles。当我打印出来时,我得到了 659 个条目。下面是我的输出示例。例如,这个特定的 url 被打印了四次。 http://diversity.mit.edu/diversity-summit-2015/

我的输出:

http://web.mit.edu/admissions/
http://diversity.mit.edu/
http://newsoffice.mit.edu
http://whereis.mit.edu
http://diversity.mit.edu/diversity-summit-2015/
http://diversity.mit.edu/event/mlk-celebration-2015/
http://mit.edu/site/?ref=mithomepage
http://ki.mit.edu
http://web.mit.edu/athletics/www/
http://twitter.com/mit
http://libraries.mit.edu/
http://web.mit.edu/faculty/
....
http://newsoffice.mit.edu
http://strategiccommunications.ucr.edu/
http://hvrd.me/GmV2x
http://diversity.mit.edu/diversity-summit-2015/
http://ucr.edu/
http://hvrd.me/IaiDY
http://ki.mit.edu
http://stanford.edu/academics/programs
http://news.stanford.edu/news/2015/january/jones-students-econversation-012815.html
http://harvard.edu/#skip
http://campusmap.ucr.edu/?loc=HINHL

【问题讨论】:

  • 你能显示包含重复的输出吗?

标签: java duplicates hashset duplicate-removal


【解决方案1】:

对于像 Java 这样广泛使用的成熟语言,最好怀疑您的程序问题。

您可以通过打印出您的 URL 字符串的 hashCode()toByteArray() 来解决此问题,这可以为您提供不同的原因。

我的猜测是

  1. 你误读了区别
  2. 您的字符串包含前导和/或尾随空格(使用trim() 删除)
  3. 您的字符串包含 UTF-8 字符,看起来相同但不同。

【讨论】:

  • 你能解释一下你的第一个猜测是什么意思吗?我在我的字符串中添加了修剪,但我仍然得到相同的结果。另外,根据您的第三个猜测,您的意思是使用字符集 UTF-16 吗?
  • 我觉得很有趣,因为我有 4 个 url 种子。我重复我的网址四次。
  • 1.只是意味着如果您被眼球误读...如果您无法通过 2 解决它。这可能意味着您有 2 个不同的字符看起来相同但代码不同。尝试打印 toByteArray() 然后您可以看到原始字节数组以确定它的不同之处。
猜你喜欢
  • 2015-06-22
  • 2022-07-05
  • 1970-01-01
  • 2021-07-16
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 2013-04-14
相关资源
最近更新 更多