检查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");
}
}
}
答案 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
}
}