2010-01-26 3 views

답변

1

사용 URL#getHost()하고, 그 후 String#split()"\\."에 필요한 경우.

업데이트 : 실제로 IP 주소가 호스트 인 경우 InetAddress#getHostName()을 독립적으로 사용해야합니다.

+0

String [] htokens = u.getHost(). toString(). split (" . "); 이 줄에는 아무 문제가 없습니다 ..이 문 다음에 이 있기 때문에 u.getHost(). toString()이 "a.bc.de"를 반환하지만 htokens 배열의 길이는 여전히 0입니다. – trinity

+0

링크에 그것은 정규식 패턴을 취한다. 대답은''\\. ''으로 나눌 필요가 있다고 언급합니다. – BalusC

2

url의 호스트 부분은 docs에 따라 RFC 2732를 준수합니다. 단순히 문자열을 문자열로 나누는 것만으로도 충분하지 않습니다.

String host = u.getHost(); 

으로 충분하지 않습니다. 호스트를 검색 할 때 RFC 2732를 준수하는지 확인하거나 모든 주소가 server.com 형식임을 보장 할 수 있으면 마지막 주소를 검색 할 수 있습니다. 끈에 넣고 tld를 잡아라.

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 
+4

귀하의 솔루션은 .co.uk 도메인에서 부족합니다. – pila

관련 문제