【问题标题】:Jsoup: "Select only links with text() equal to"Jsoup:“仅选择 text() 等于的链接”
【发布时间】:2011-11-10 23:38:12
【问题描述】:

一种使用等于某些预定义字符串的 text() 来处理链接的方法很简单:

Elements links = document.getElementsByTag("a");               
for (Element link : links) {
    if (link.text().equals("So & so") || link.text().equals("such & such") {
        // add link.attr("href") to our container;
    }
}                   

但是随着 text() 条件数量的增加,这种方法看起来越来越没有效率了。

有没有更好的方法在 Jsoup 中实现这一点?

【问题讨论】:

    标签: java html-parsing jsoup


    【解决方案1】:

    这与 Jsoup 无关,但为什么不使用诸如 HashSet 之类的 Set 来保存您的有效字符串呢?然后,如果该集合被称为“validTextSet”,您可以非常简单有效地测试文本是否在集合中

         if (validTextSet.contains(link.text())) {
            // add link.attr("href") to our container;
         }
    

    【讨论】:

    • 这绝对是性能上的提升,而且似乎 Jsoup 中还没有这样的机制,所以我很快就会接受。有趣的是,尽管高级编程语言取得了巨大进步,但通过函数指针数组实现非整数开关/大小写的旧“C”技术在 Java 中仍然适用(伪装)。我也 +1。
    • @ef2011:这不在 Jsoup 中,我并不感到惊讶,因为它确实不是解析 HTML 的一部分,而是在获取信息后如何处理信息。另外,我认为 HashMap 在理论上比 switch/case 更快,但我可能错了。
    • 这正是我的意思。 'C' 中的 优化 开关/案例实际上是一个伪装的 HashMap(哈希用作数组的即时访问索引)。
    猜你喜欢
    • 2016-08-22
    • 2016-08-14
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多