1

私はJavaの初心者です。私のクラスでは、ユーザーが入力した html ソース コードから解析されるすべてのリンクを出力する必要があります。

基本的に、外部メソッドを使用せずに (つまり、配列、部分文字列、および文字列のメソッドを使用し、その他のライブラリ)。

4

3 に答える 3

5

パーサーや正規表現では実行しないでください。ジェリーを試してみてください。いいね(テストされていません):

Jerry doc = jerry(html);
doc.$("a").each(new JerryFunction() {
    public boolean onNode(Jerry $this, int index) {
        String href = $this.attr("href");
        System.out.println(href);
    }
}

またはHTML対応のクエリ言語。外部以外の要件があるため、Javaを使用してHTMLディレクトリリスト内のリンクを解析してみてください

于 2012-10-13T18:38:19.483 に答える
2

あなたがどのクラスにいるのかわからないので、正規表現ソリューションはあなたにとって高度すぎるかもしれません。例えば一年生ならそうかもしれません
が、よくわかりません。

部分文字列または配列を使用してそれを行うこともできますが、それはコーディングが多すぎます。そのため、標準の Java 正規表現が存在します。

String A_TAG_MATCHING_GROUP = "<a>([^<>]*)</a>";

Matcher matcher = Pattern.compile(A_TAG_MATCHING_GROUP).matcher("<html>\n<head>d\nadas</head><body><a>LINK_DESC_ONE</a>dsdasd<a>LINK_DESC_2</a></body></html>");
String url, linkDescription;
while (matcher.find()) {
        System.out.println(matcher.group(1));
}

このコードをコンパイルして実行し、読み続けてください!

重要な部分は A_TAG_MATCHING_GROUP 正規表現です。現在のように、正確な文字列 " <a>" とそれに続くものに一致します。

  • なしまたは必要な数の文字(スター- *で示される)
  • 上記の文字は、(キャレット - ^ で示される)「<」または「>」ではない任意の文字として定義されます(何かが角括弧内にある場合の正確な用語- [ ]文字クラスです)

したがって、A_TAG_MATCHING_GROUP の正規表現をうまく書くと、

matcher.group(i);

URLを取得します。それはあなたのクラスのためなので、私はあなたのためにそれを書きません :) マッチャーの引数を変更し、少し再生します (ハードコードされた html 文字列を変更します)。いくつかの実際の html を取得し、出力をこのような実際のツールの出力と比較します

もちろん、事前に特定のチュートリアルを読む必要があります (これも役立つ場合があります)。関連する API リンクは次のとおりです。

ただし、「配列と部分文字列」を使用する場合は、次のアルゴリズムを使用できます。

  1. たとえば、文字ごとにhtml文字を読み取ります

    文字列 html ; for (Character c : s.toCharArray()) { //
    }

  2. 「<」にたどり着いたら、それを思い出してください(たとえば、ブール変数first_char_of_a_tag_foundで)

  3. その後に「a」文字を付けるか、改行とスペースを許可するかをすぐに決定します。「a」を検出したら、ブール変数で覚えておいてください。

  4. 「 href=" 」に到達したら、内容を思い出し始めます - [substring()](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#substring( int, int)) を html 文字列に変換し、その戻り値をurlというStringBuilder変数に格納します。

これは非常に低レベルのアルゴリズムですが、機能します。多くのコーディングが必要であり、モノリシック手続き型のアプローチです。

基本的に、大雑把に言えば、正規表現「エンジン」を実装することになります。これは、投稿の最初の部分で説明したものです。

私は両方とも課題としてプログラムしました (1 つ目は Java の就職面接用、2 つ目は Java 大学の入学試験としての C 言語) が、通常の学習方法にもかかわらず (2 つ目が最初)、最初の 1 つ - しかし、それはあなたがタイトなスケジュールで、あなたの現在の知識が何であるかによって異なります.

それが役に立てば幸い :)

編集:

正規表現を使用してHTMLを解析することはできませんが、正規表現を使用してタグから URLを解析することはできます。アントンが提案したように、私は間違いなくジェリーに行きます。

まず、ジェリーのような解決策は、彼と私の投稿のサイズとそれを処理するのに必要な時間を観察するだけで、実際の生活でははるかに優れていることがわかります:))

于 2012-10-13T20:26:19.553 に答える
0

これらのアイデアのいくつかを検討することをお勧めします

于 2012-10-13T20:38:20.057 に答える