1

我正在做我的第一个项目,其中包括一个网站解析器。我试图了解一些关于解析器的知识,偶然发现了一个名为“Jsoup”的库,在这里可以找到:http: //jsoup.org/download

然后我尝试了在教程网站上找到的这个代码示例:

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class HTMLParserExample1 {

  public static void main(String[] args) {

    Document doc;
    try {

        // need http protocol
        doc = Jsoup.connect("http://google.com").get();

        // get page title
        String title = doc.title();
        System.out.println("title : " + title);

        // get all links
        Elements links = doc.select("a[href]");
        for (Element link : links) {

            // get the value from href attribute
            System.out.println("\nlink : " + link.attr("href"));
            System.out.println("text : " + link.text());

        }

    } catch (IOException e) {
        e.printStackTrace();
    }

  }

}

代码运行良好,所以我决定尝试将它与我的应用程序的其余部分结合起来(这是一个 JFrame,里面有一个文本框)

所以我试图做的是将放入 [code]System.out.println();[/code] 的内容放入字符串中。在这样做时,我在尝试按以下方式进行操作时遇到错误:

s + "\nlink : " + link.attr("href");
s + "text : " + link.text();

我遇到了错误,很快意识到这不是正确的做法,所以我找到了 String.concat 方法并决定使用它。使用它之后它仍然没有工作,然后我也意识到应该解析的内容也停止使用 System.out 命令打印出来。

这是我当前的代码:

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class JParser {

    private String finishedParse;

     public static void JParser() {

         //String that should hold the finished parse
         String finishedParse = new String();

         //test string used to see if what the Netbeans IDE recomended me to do work
         String tester = new String();
         finishedParse = "";

    Document doc;
    try {

        //Need http protocol
        doc = Jsoup.connect("http://google.com").get();

        //Get page title
        String title = doc.title();
        System.out.println("title : " + title);

        //Get all links
        Elements links = doc.select("a[href]");
        for (Element link : links) {

            //Get the value from href attribute
            System.out.println("\nlink : " + link.attr("href"));
            System.out.println("text : " + link.text());
                        tester = finishedParse.concat("\nlink : " + link.attr("href"));
                        tester = finishedParse.concat("text : " + link.text());
                        tester = finishedParse.concat("\n");

        }

    } catch (IOException e) {
        e.printStackTrace();
                System.out.println(e);
    }
  }

     //The method i wish to call from my other class to get the parsed text returned.
     public String getParsedText(String parsedText){
         parsedText = finishedParse;
         return parsedText;
     }
}

现在的问题是,应该使用 System.out 命令打印的内容没有被打印出来,我仍然没有弄清楚如何将解析后的文本放入我的字符串中。

我真的对学习很感兴趣,我很难找到我的代码中的错误。我确实在网上搜索了答案,但没有成功。

剩下的错误 如下 两个 System.out 语句没有向控制台打印任何内容,当我从教程中复制代码时它确实有效。这两个代码都在上面的帖子中,请阅读并帮助我。

问题是我以一种奇怪的方式打电话给班级,我最好的猜测是我昨天很累所以我的无知开始了..

4

1 回答 1

1

尝试这个:

for (Element link : links) {

  // Get the value from href attribute
  System.out.println("\nlink : " + link.attr("href"));
  System.out.println("text : " + link.text());
  finishedParse = finishedParse.concat("\nlink : " + link.attr("href"));
  finishedParse = finishedParse.concat("text : " + link.text());
  finishedParse = finishedParse.concat("\n");

}

请注意,使用concat()与使用运算符完全相同+,真正的问题是您应该更新用于连接最终答案的字符串。更好的是,您应该将 aStringBuilder用于此类工作 - 它将就地更新(而concat()每次都返回一个新字符串),因此效率更高。

StringBuilder sb = new StringBuilder();

for (Element link : links) {

  // Get the value from href attribute
  System.out.println("\nlink : " + link.attr("href"));
  System.out.println("text : " + link.text());
  sb.append("\nlink : " + link.attr("href"));
  sb.append("text : " + link.text());
  sb.append("\n");

}

String finishedParse = sb.toString();
于 2013-04-11T19:28:22.857 回答