如何使用java识别URL对象的顶级域?

时间:2010-01-26 17:25:28

标签: java url tld url-parsing

鉴于此:

URL u=new URL("someURL");

如何识别网址的顶级域名。

4 个答案:

答案 0 :(得分:4)

所以你想只拥有top-level domain part

//parameter urlString: a String
//returns: a String representing the TLD of urlString, or null iff urlString is malformed
private String getTldString(String urlString) {
    URL url = null;
    String tldString = null;
    try {
        url = new URL(urlString);
        String[] domainNameParts = url.getHost().split("\\.");
        tldString = domainNameParts[domainNameParts.length-1];
    }
    catch (MalformedURLException e) {   
    }

    return tldString;
}

我们来试试吧!

@Test 
public void identifyLocale() {
    String ukString = "http://www.amazon.co.uk/Harry-Potter-Sheet-Complete-Series/dp/0739086731";
    logger.debug("ukString TLD: {}", getTldString(ukString));

    String deString = "http://www.amazon.de/The-Essential-George-Gershwin/dp/B00008GEOT";
    logger.debug("deString TLD: {}", getTldString(deString));

    String ceShiString = "http://例子.测试";
    logger.debug("ceShiString TLD: {}", getTldString(ceShiString));

    String dokimeString = "http://παράδειγμα.δοκιμή";
    logger.debug("dokimeString TLD: {}", getTldString(dokimeString));

    String nullString = null;
    logger.debug("nullString TLD: {}", getTldString(nullString));

    String lolString = "lol, this is a malformed URL, amirite?!";
    logger.debug("lolString TLD: {}", getTldString(lolString));

}

输出:

ukString TLD: uk
deString TLD: de
ceShiString TLD: 测试
dokimeString TLD: δοκιμή
nullString TLD: null
lolString TLD: null

答案 1 :(得分:3)

根据docs,网址的主机部分符合RFC 2732。这意味着只需要分割你从

获得的字符串
  String host = u.getHost();

还不够。在搜索主机时,您需要确保符合RFC 2732,或者如果您可以保证所有地址都是server.com形式,那么您可以搜索最后一个。在字符串中抓住tld。

答案 2 :(得分:3)

Guava 为此提供了一个很好的实用程序。其工作原理如下:

InternetDomainName.from("someurl.co.uk").publicSuffix()将使您co.uk InternetDomainName.from("someurl.de").publicSuffix()将为您带来de

答案 3 :(得分:1)

使用URL#getHost(),如果有必要,请"\\."使用String#split()

更新:如果您确实拥有IP地址作为主机,那么您需要独立使用InetAddress#getHostName()