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