<title> </title>
タグの間から Web ページのタイトルを抽出する必要があります。
<body...>
また、 タグとタグの間にあるすべてのテキストを表示する必要がありますが、本文の</body>
外側には何も表示しません。
山かっこや html データが返されないようにします。
<title> </title>
タグの間から Web ページのタイトルを抽出する必要があります。
<body...>
また、 タグとタグの間にあるすべてのテキストを表示する必要がありますが、本文の</body>
外側には何も表示しません。
山かっこや html データが返されないようにします。
次のようなものを使用できます。
String html = "<html>My page</html>";
String title = html.substring(html.indexOf("<html>") + 6, html.indexOf("</html"));
System.out.println(title);
String.indexOf (string)メソッドは、指定された文字列 (変数 html) 内の文字列 (例では"<html>"
と)の開始インデックスを返します。"</html>"
String.substring(int, int)メソッドは、2 つのインデックス間の文字列を返します。
これで、ブラウザを起動できます。
質問を簡単にするために、巨大な文字列を検索して別の文字列を見つけ、その場所を記録するにはどうすればよいですか?
int index = bigString.indexOf("<body");
<body
... inの最初の出現を見つけ、bigString
そのインデックスを返します (これは で使用できますsubstring
)。しかし、それを行う方法がわからない場合、割り当ては面倒です。このコースでは、このタスクの準備が適切に行われているはずですが、そうではないようです。
HTML の解析は複雑です。indexOf
と を使用して、半分完成した不正確なジョブを実行できますがsubstring
、それは...半分完成した不正確なものになります。
この問題にアプローチする方法はたくさんありますが、提示した制約を使用すると、低レベルのアプローチを取ることができます。最初に、この HTML ドキュメント全体を という文字列で受け取ったと仮定しますhtml
。最初のタスクは、'' を検索することです。この回答ではカバーできないエラーチェックがたくさんありますが、すべての宿題を行うことはできません:P。したがって、title
要素は小文字で整形式であると想定します。
最初に、HTML のどこにタイトル要素があるかを判断する必要があります (ここでは を使用していますindexOf()
)
int start = html.indexOf("<title>")+"<title>".length();
int end = html.indexOf("</title>", start);
次に、それを文字列に抽出します (を使用substring()
):
String title = html.substring(start, end);
説明から、完全な HTML ドキュメントを解析する必要はありませんが、そこからいくつかの情報を抽出するだけです。有限ステート マシンに基づくアプローチが機能します。
要素が見つかるまでスキャンします<title>
。その時点から、終わりが見つかるまで、すべてがデータです</title>
。次に、開口部が見つかるまでスキャンします<body>
。<
その時点から、 と の間にあるものをスキップして「コンテンツ」を読む必要があります>
。これは、次のように行うことができます。
//input stream in is just after <body>
String body="";
String element="";
boolean ignore=false
while (true) {
char c = in.read();
if (c<0) break; //end of stream
if (ignore) {
if (c=='>') {
if (element.equals("/body")) break; //closing </body>
ignore=false;
}
else element+=c;
} else {
//not in ignore mode
if (c=='<') {element=""; ignore=true;}
else body+=c;
}
この種の問題を解決するためにプログラマーが使用する 2 つの開発段階があります。
1. 自分でデータを解析します。
HTML (良い HTML) では、ほとんどのタグの後に終了タグが続きます。<title>
タグもその一つです。それらの間にあるものを見つけようとしている場合は、 のインデックスを見つけてください<title>
。>
簡単にするために、おそらく最後のインデックスが必要です。
次に、現在の文字が でない間<
、その文字を文字列に追加します。
を打っ<
たら、それが かどうかを確認する必要があります</title>
。そうでない場合は、読み続けてください。基本的に、ループし続けます。<
タイトルの終了タグであるかどうかをチェックするたびに。
これが非常に難しく、車輪の再発明であることに気付いたら、ステップ 2 に進みます。
2. DOM パーサー ライブラリを使用します。
ステップ 1 を実行しようとして自分自身を傷つけた後、HTML を解析したり、HTML で正規表現を使用したりしないようにプログラマーが強くアドバイスする理由を発見します。バトルテスト済みの HTML パーサーですでに戦い、勝利したことを理解してください。主要な Java HTML パーサーの長所と短所は何ですか?