使用java实现Public Suffix提取

我需要提取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 

任何人都可以告诉我如何使用这个库实现一个例子….

在我看来,像InternetDomainName.topPrivateDomain() 完全符合你的要求。 Guava维护一个公共后缀列表(基于Mozilla在publicsuffix.org上的列表),它用于确定主机的公共后缀部分是什么……顶级私有域是公共后缀加上它的第一个孩子。

这是一个简单的例子:

 public class Test { public static void main(String[] args) throws URISyntaxException { ImmutableList 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 

我最近实现了一个Public Suffix List API :

 PublicSuffixList suffixList = new PublicSuffixListFactory().build(); assertEquals( "google.com", suffixList.getRegistrableDomain("example.google.com")); assertEquals( "bing.com", suffixList.getRegistrableDomain("bing.bing.bing.com")); assertEquals( "amazon.co.jp", suffixList.getRegistrableDomain("www.amazon.co.jp")); 

编辑:对不起,我有点太快了。 我没想到co.jp. co.uk,等等。 您需要从某个地方获取可能的TLD列表。 您还可以查看http://commons.apache.org/validator/来validationTLD。

我认为这样的事情应该有效:但也许存在一些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 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);