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

Get domain without subdomains in Java?

下面的代码打印 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 库。

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

要在此处识别域名,您需要知道什么 TLD(顶级域,如 .com、.co 等)或 ccTLD(国家/地区代码 TLD,如 .co.uk、.uk 等)您事先期待,因为这将确定您的位置(哪个 . 点)域名开头。

例如,以下正则表达式:

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

将为您识别以下域名:

www.google.com
mail.google.co
www.google.co.uk
www.sub.google.uk

更通用的解决方案需要事先做出假设,例如 TLD 或 ccTLD 将不会超过两个或三个字符以将它们与主域区分开来,但对于较新的 TLD,如 .guru、.photos、.expert、 .legal 等。它不再适用于所有域。