5

URLのトップドメインを抽出する必要があり、彼を取得しましたhttp://publicsuffix.org/index.html

Java実装があり、http://guava-libraries.googlecode.comドメイン名を抽出する例が見つかりませんでした

say example..
example.google.com
returns google.com

and bing.bing.bing.com
returns bing.com

このライブラリを使用して例を使用して実装する方法を教えてください....

4

3 に答える 3

18

InternetDomainName.topPrivateDomain()まさにあなたが望むことをしているように私には見えます。Guava は、ホストのパブリック サフィックス部分が何であるかを判断するために使用するパブリック サフィックスのリスト (publicsuffix.org にある Mozilla のリストに基づく) を保持しています。トップのプライベート ドメインは、パブリック サフィックスとその最初の子です。

簡単な例を次に示します。

public class Test {
  public static void main(String[] args) throws URISyntaxException {
    ImmutableList<String> urls = ImmutableList.of(
        "http://example.google.com", "http://google.com", 
        "http://bing.bing.bing.com", "http://www.amazon.co.jp/");
    for (String url : urls) {
      System.out.println(url + " -> " + getTopPrivateDomain(url));
    }
  }

  private static String getTopPrivateDomain(String url) throws URISyntaxException {
    String host = new URI(url).getHost();
    InternetDomainName domainName = InternetDomainName.from(host);
    return domainName.topPrivateDomain().name();
  }
}

このコードを実行すると、次のように出力されます。

http://example.google.com -> google.com
http://google.com -> google.com
http://bing.bing.bing.com -> bing.com
http://www.amazon.co.jp/ → amazon.co.jp
于 2011-01-27T19:09:17.250 に答える
1

編集:申し訳ありませんが、少し速すぎました。co.jpは思いつきませんでした。co.ukなど。どこかから可能な TLD のリストを取得する必要があります。http://commons.apache.org/validator/を見て TLD を検証することもできます。

このようなものがうまくいくはずだと思います:しかし、Java標準関数が存在するかもしれません。

String url = "http://www.foobar.com/someFolder/index.html";
if (url.contains("://")) {
  url = url.split("://")[1];
}

if (url.contains("/")) {
  url = url.split("/")[0];
}

// You need to get your TLDs from somewhere...
List<String> magicListofTLD = getTLDsFromSomewhere();

int positionOfTLD = -1;
String usedTLD = null;
for (String tld : magicListofTLD) {
  positionOfTLD = url.indexOf(tld);
  if (positionOfTLD > 0) {
    usedTLD = tld;
    break;
  }
}

if (positionOfTLD > 0) {
  url = url.substring(0, positionOfTLD);
} else {
  return;
}
String[] strings = url.split("\\.");

String foo = strings[strings.length - 1] + "." + usedTLD;
System.out.println(foo);
于 2011-01-27T17:48:17.453 に答える