1

私は、Web サイト パーサーを含む最初のプロジェクトに取り組んでいました。私はパーサーについて少し学ぼうとしましたが、ここにある「Jsoup」というライブラリに出くわしました: http://jsoup.org/download

次に、チュートリアル Web サイトで見つけたこのコード例を試しました。

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 コマンドで出力されるはずのものが出力されず、解析されたテキストを文字列に取り込む方法がまだわからないことです。

私は学習に本当に興味があり、コードの何が間違っているのかを見つけるのに苦労しています。Web で回答を検索しましたが、成功しませんでした。

残っているエラー は次のとおりです。2 つの 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()使用は演算子の使用とまったく同じであることに注意して+ください。実際の問題は、最終的な回答を連結するために使用されている文字列を更新する必要があることです。さらに良いことに、StringBuilderこの種のジョブには a を使用する必要があります。これはインプレースで更新されるため (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 に答える