最速の方法は、特定の情報を自分で解析することです。HTMLの構造を事前に正確に知っているようです。、およびメソッドで十分ですBufferedReader
。あなた自身の質問の最初の段落を表示するキックオフの例を次に示します。String
StringBuilder
public static void main(String... args) throws Exception {
URL url = new URL("http://stackoverflow.com/questions/2971155");
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
for (String line; (line = reader.readLine()) != null;) {
builder.append(line.trim());
}
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}
String start = "<div class=\"post-text\"><p>";
String end = "</p>";
String part = builder.substring(builder.indexOf(start) + start.length());
String question = part.substring(0, part.indexOf(end));
System.out.println(question);
}
解析は、実質的にすべてのケースで、パターン マッチングよりも確実に高速です。パターン マッチングはより簡単ですが、複雑な正規表現パターンを使用する場合に、予期しない結果が生じるリスクがあります。
自分で作成する代わりに、より柔軟なサードパーティの HTML パーサーを使用することも検討できます。事前に知っている情報で自分自身を解析するほど速くはありません。ただし、より簡潔で柔軟になります。適切な HTML パーサーを使用すると、速度の違いはごくわずかです。これにはJsoupを強くお勧めします。jQuery のような CSS セレクターをサポートしています。質問の最初の段落を抽出するのは、次のように簡単です。
public static void main(String... args) throws Exception {
Document document = Jsoup.connect("http://stackoverflow.com/questions/2971155").get();
String question = document.select("#question .post-text p").first().text();
System.out.println(question);
}
どの Web ページについて話しているのか不明であるため、Jsoup を使用して特定のページから特定の情報を選択する方法について、これ以上詳細な例を示すことはできません。それでも Jsoup とCSS セレクターを使用して自分で理解できない場合は、お気軽に URL をコメントに投稿してください。その方法を提案します。