13

Javaを使用してベースURLを取得しようとしています。コードでjtidyパーサーを使用してタイトルを取得しました。jtidyを使用してタイトルを正しく取得していますが、指定されたURLからベースURLを取得していません。

入力としていくつかのURLがあります:

String s1 = "http://staff.unak.is/andy/GameProgramming0910/new_page_2.htm";
String s2 = "http://www.complex.com/pop-culture/2011/04/10-hottest-women-in-fast-and-furious-movies";

最初の文字列からベースURLとしてフェッチ"http://staff.unak.is/andy/GameProgramming0910/"し、2番目の文字列からベースURLとしてフェッチし"http://www.complex.com/"ます。

私はコードを使用しています:

URL url = new URL(s1);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
Document doc = new Tidy().parseDOM(in, null);
String titleText = doc.getElementsByTagName("title").item(0).getFirstChild()
.getNodeValue();

取得titletextしていますが、上記のURLからベースURLを取得する方法を教えてください。

4

2 に答える 2

26

java.net.URLクラスを使用してみてください。これは、次のことに役立ちます。

2番目のケースでは、より簡単であるため、新しいURL(s2).getHost();を使用できます。

最初のケースでは、ホストを取得し、getFile()メソッドを使用して、最後のスラッシュ( "/")の後の文字列を削除することもできます。次のようなもの:(コードはテストされていません)

URL url = new URL(s1);
String path = url.getFile().substring(0, url.getFile().lastIndexOf('/'));
String base = url.getProtocol() + "://" + url.getHost() + path;
于 2011-05-16T08:53:07.540 に答える
9

java.net.URLクラスを使用して、相対URLを解決します。

最初のケースの場合:パスからファイル名を削除します。

new URL(new URL(s1), ".").toString()

2番目のケースの場合:ルートパスの設定:

new URL(new URL(s2), "/").toString()
于 2017-11-05T11:49:23.507 に答える