在Java中获取没有子域的域名?

时间:2015-04-03 02:27:24

标签: java subdomain

以下代码打印www.sub.google.com

import java.net.MalformedURLException;
import java.net.URL;
public class GetDomainNameFromURL {
    public static void main(String[] args) throws MalformedURLException {
        String s = "http://www.sub.google.com/main?&t=20&f=52";
        URL u = new URL(s);
        String hostName = u.getHost();
        System.out.println(hostName);
    }
}

如何打印google.com?需要使用普通Java,无Guava库。

1 个答案:

答案 0 :(得分:2)

这很棘手,因为URL类只能让你到目前为止。它为您提供主机名,然后由您提取域名减去子域

要在此处识别域名,您需要知道哪些TLD(顶级域名,如.com,.co等)或ccTLD(国家/地区代码) TLD ,例如.co.uk,.uk等)您之前预期会因为这将决定您的域名从哪里开始(.点)。

例如,以下正则表达式:

(?<=.)[^.]+\.(com|co(\.uk)?|uk)$

会为您识别以下域名:

  

万维网。的 google.com
  邮件。的 google.co
  万维网。的 google.co.uk
  www.sub。 google.uk

更通用的解决方案需要预先做出假设,例如TLD或ccTLD将不超过两个或三个字符,以区别于主域,但使用更新的顶级域名,如.guru,.photos,.expert,.legal它不可能使其适用于所有领域。