如何检查html文档是否包含字符串

时间:2015-07-22 20:51:54

标签: java jsoup contains

检查URL是否包含给定字符串的快速方法是什么?我尝试了jsoup和模式匹配,但有更快的方法。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupTest {

    public static void main(String[] args) throws Exception {

        String url = "https://en.wikipedia.org/wiki/Hawaii";
        Document doc = Jsoup.connect(url).get();
        String html = doc.html();

        Pattern pattern = Pattern.compile("<h2>Contents</h2>");
        Matcher matcher = pattern.matcher(html);
        if (matcher.find()) {
            System.out.println("Found it");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这取决于。如果您的模式实际上只是在页面内容中找到的简单子字符串,那么您建议的两种方法都是过度的。如果确实如此,那么你应该在没有在JSoup中解析它的情况下获取页面。如果你想获得页面,你仍然可以使用Jsoup,只是不要启动解析器:

Connection con = Jsoup.connect("https://en.wikipedia.org/wiki/Hawaii");
Response res = con.execute();   
String rawPageStr = res.body();

if (rawPageStr.contains("<h2>Contents</h2>")){
  //do whatever you need to do
}

如果模式确实是正则表达式,请使用:

Pattern pattern = Pattern.compile("<h2>\\s*Contents\\s*</h2>");
Matcher matcher = pattern.matcher(rawPageStr);

如果您不需要解析更多页面,这只是有意义的。但是,如果你真的想通过CSS选择器对DOM进行结构化搜索,那么JSoup并不是一个糟糕的选择,尽管像TagSoup这样基于SAX的方法可能会更快一点。

Document doc = Jsoup.connect("https://en.wikipedia.org/wiki/Hawaii").get();
Elements h2s = doc.select("h2");
for (Element h2 : h2s){
  if (h2.text().equals("Contents")){
    //do whatever & more
  }
}