
本文介绍如何通过解析 url 获取顶级域名(tld),并基于预定义映射判断网站性质(如商业、组织、教育等),适用于 java 开发中常见的域名分类场景。
本文介绍如何通过解析 url 获取顶级域名(tld),并基于预定义映射判断网站性质(如商业、组织、教育等),适用于 java 开发中常见的域名分类场景。
在实际开发中,我们常需根据 URL 快速识别网站所属类别(例如 .com 表示商业机构,.org 代表非营利组织)。核心思路是:提取 URL 中的顶级域名后缀(即最后一个点 . 之后的部分),再通过键值映射匹配其语义含义。
Java 中推荐使用 String.split("\.") 进行安全分割(注意正则中点号需转义),然后取数组末尾元素作为 TLD。为提升可维护性与扩展性,应避免硬编码判断逻辑,而采用 Map<string string></string> 存储 TLD 到描述的映射关系,并配合 getOrDefault() 提供默认反馈。
以下为完整示例代码:
String[] urls = {
"stackoverflow.com",
"wikipedia.org",
"harvard.edu",
"parliament.lk",
"uscapitol.gov"
};
Map<String, String> tldMap = Map.ofEntries(
Map.entry("com", "Commercial website"),
Map.entry("org", "Organization website"),
Map.entry("edu", "Educational website"),
Map.entry("lk", "Sri Lankan website"),
Map.entry("gov", "Government website")
);
for (String url : urls) {
// 基础处理:移除协议头(如 https://)和路径部分,仅保留主机名
String hostname = url.replaceAll("^https?://([^/]+).*", "$1");
String[] parts = hostname.split("\.");
if (parts.length == 0) {
System.out.printf("%s -> Invalid URL format%n", url);
continue;
}
String tld = parts[parts.length - 1].toLowerCase(); // 统一转小写,增强健壮性
String description = tldMap.getOrDefault(tld, "Unknown website type for domain `" + tld + "`");
System.out.printf("%s -> %s%n", url, description);
}输出结果:
stackoverflow.com -> Commercial website wikipedia.org -> Organization website harvard.edu -> Educational website parliament.lk -> Sri Lankan website uscapitol.gov -> Government website
⚠️ 注意事项:
- 实际生产环境中,URL 可能含协议(
https://)、端口(:8080)、路径(/about)等,建议先用正则或java.net.URL解析出host,再提取 TLD; - 对于多级国家代码顶级域(如
.co.uk、.gov.au),简单取最后一段可能不准确,此时需引入专业库(如 Public Suffix List)进行合规解析; - 使用
Map.ofEntries()或Map.of()构建不可变映射时,注意 JDK 版本要求(JDK 9+ 支持Map.of,JDK 10+ 推荐Map.ofEntries提高可读性); - 始终对输入做空值与格式校验,防止
ArrayIndexOutOfBoundsException或NullPointerException。
综上,该方法简洁高效,适合大多数基础域名分类需求;若涉及国际化复杂域名,则建议结合成熟工具库进一步增强准确性与兼容性。

















