8

これを考えると:

URL u=new URL("someURL");

URL のトップ レベル ドメインを特定するにはどうすればよいですか。

4

4 に答える 4

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;
}

テストしてみましょう!

@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
于 2013-02-02T13:42:46.820 に答える
3

ドキュメントによると、URL のホスト部分は RFC 2732 に準拠しています。取得した文字列を単純に分割することを意味します

  String host = u.getHost();

十分ではないでしょう。ホストを検索するときは、RFC 2732 に準拠していることを確認する必要があります。または、すべてのアドレスが server.com の形式であることを保証できる場合は、最後の . 文字列でtldを取得します。

于 2010-01-26T18:07:45.987 に答える
1

URL#getHost()その後、必要に応じてString#split()onを使用し"\\."ます。

更新: 実際にホストとして IP アドレスを持っている場合は、InetAddress#getHostName()個別に使用する必要があります。

于 2010-01-26T17:27:25.883 に答える