Как определить домен верхнего уровня объекта URL, используя Java? - PullRequest
6 голосов
/ 26 января 2010

Учитывая это:

URL u=new URL("someURL");

Как определить домен верхнего уровня URL-адреса ..

Ответы [ 3 ]

4 голосов
/ 02 февраля 2013

Итак, вы хотите, чтобы часть домена верхнего уровня только?

//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
3 голосов
/ 26 января 2010

Основная часть URL соответствует RFC 2732 в соответствии с документами . Это будет означать, что простое разбиение строки, которую вы получите от

  String host = u.getHost();

было бы недостаточно. Вам нужно будет убедиться, что вы соответствуете RFC 2732 при поиске на хосте ИЛИ если вы можете гарантировать, что все адреса имеют форму server.com, тогда вы можете искать последний. в строку и возьмите слово.

1 голос
/ 26 января 2010

Используйте URL#getHost() и, при необходимости, после этого String#split() на "\\.".

Обновление : если у вас фактически есть IP-адрес в качестве хоста, вам нужно использовать InetAddress#getHostName() независимо.

...