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

tri*_*ity 6 java url url-parsing tld

鉴于这种 :

URL u=new URL("someURL");
Run Code Online (Sandbox Code Playgroud)

如何识别URL的顶级域名..

jer*_*mie 7

番石榴为此提供了一个很好的实用程序。它的工作原理如下:

InternetDomainName.from("someurl.co.uk").publicSuffix()会得到你co.uk InternetDomainName.from("someurl.de").publicSuffix()会得到你de


Abd*_*ull 5

所以你只想拥有顶级域部分

//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;
}
Run Code Online (Sandbox Code Playgroud)

让我们来测试一下!

@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));

}
Run Code Online (Sandbox Code Playgroud)

输出:

ukString TLD: uk
deString TLD: de
ceShiString TLD: ??
dokimeString TLD: ??????
nullString TLD: null
lolString TLD: null
Run Code Online (Sandbox Code Playgroud)

  • 例如,您的解决方案缺少 .co.uk 域 (14认同)

Bal*_*usC 1

使用URL#getHost()并在必要时使用String#split()on "\\."

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