我需要提取一个 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
谁能告诉我如何使用这个库来实现一个例子......
我需要提取一个 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<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
我最近实现了一个公共后缀列表 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/来验证 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);