Java 代码优化(jsoup)

Java Code Optimization(jsoup)

有没有一种有效的方法来优化这段代码,因为它的大部分看起来都是一样的,我刚开始学习 jsoup,不知道如何真正做到这一点://

Document doc = Jsoup.connect("http://www.blocket.se/hela_sverige/bilar?ca=11&cg=1020&w=3&md=th").get();

Elements partOne = doc.select("a[title=Flera bilder]");
for (Element element : partOne) {
    String myElementOne = element.attr("abs:href");
    System.out.println(myElementOne);

}
Elements partTwo = doc.select("a[title=\"\"]");
for (Element element : partTwo) {
    String myElementTwo = element.attr("abs:href");
    System.out.println(myElementTwo);

}
Elements partThree = doc.select("a[title=Bild]");
for (Element element : partThree) {
    String myElementThree = element.attr("abs:href");
    System.out.println(myElementThree);

}

partOnepartTwopartThree块基本相同;只需将所有参数差异替换为变量并提取到方法中:

void someMethodName(Document doc, String selector) {
  Elements partOne = doc.select(selector);
  for (Element element : partOne) {
    String myElementOne = element.attr("abs:href");
    System.out.println(myElementOne);
  }
}

调用示例:

someMethodName(doc, "a[title=Flera bilder]");

或者,如果您可以访问 Guava:

Iterable<Element> it = Iterables.concat(
    doc.select("a[title=Flera bilder]"),
    doc.select("a[title=\"\"]"),
    doc.select("a[title=Bild]"));
for (Element element : it) {
  String myElement = element.attr("abs:href");
  System.out.println(myElement);
}

is of course doing the job. However, since you asked specifically for ways optimizing the JSoup calls, I would suggest to learn more about CSS selectors and regular expressions。例如,这在您的情况下会很好:

Elements allParts = doc.select("a[title~=^Flera bilder$|^$|^Bild$]");
for (Element element : allParts) {
    String elStr = element.attr("abs:href");
    System.out.println(elStr);
}

在这里,我对属性文本使用 ~= 运算符。它允许我使用一个通用的正则表达式将所有三个 select 语句合并为一个。

另一种方法是使用 , 运算符将所有 select 或添加到一个:

Elements allParts2 = doc.select("a[title=Flera bilder],a[title=\"\"],a[title=Bild]");