🗣 Wd提问: java获取域名
🤖 Ai回答: 在 Java 中获取域名(即从 URL 或字符串中提取域名部分)有多种方式,以下是几种常见的方法:
✅ 方法一:使用 `java.net.URL` 类(推荐)
java
import java.net.URL;
public class GetDomain {
public static void main(String[] args) {
String urlString = https://www.65.hk:8080/path?query=1;
try {
URL url = new URL(urlString);
String domain = url.getHost(); // 获取主机名(域名)
int port = url.getPort(); // 获取端口
System.out.println(域名: + domain);
System.out.println(端口: + port);
// 如果需要去掉端口(如 :80, :443),可以进一步处理
if (port == 80 port == 443) {
domain = domain; // 保留原域名
} else {
domain = domain + : + port;
}
System.out.println(完整域名(含端口): + domain);
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出示例:
域名: www.65.hk
端口: 8080
完整域名(含端口): www.65.hk:8080
⚠️ 注意:如果 URL 没有指定端口,默认端口是 80(HTTP)或 443(HTTPS),但 `url.getPort()` 返回 `-1` 表示未指定。
✅ 方法二:使用 `java.net.URI`(更灵活)
java
import java.net.URI;
public class GetDomainFromURI {
public static void main(String[] args) {
String uriString = https://www.65.hk:8080/path?query=1;
URI uri = URI.create(uriString);
String domain = uri.getHost();
System.out.println(域名: + domain);
}
}
`URI` 和 `URL` 类似,但 `URI` 不会尝试解析网络协议,更适合用于非网络操作的场景。
✅ 方法三:从字符串中手动提取域名(适用于无 URL 的情况)
如果你有一个字符串(比如 `http://65.hk`),想从中提取域名,可以使用正则表达式:
java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtractDomain {
public static void main(String[] args) {
String input = https://www.65.hk:8080/path?query=1;
// 正则表达式匹配域名
Pattern pattern = Pattern.compile((?:https?://)?([^:/]+));
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
String domain = matcher.group(1);
System.out.println(域名: + domain);
} else {
System.out.println(未找到域名);
}
}
}
支持的格式:
`http://65.hk`
`https://www.65.hk`
`65.hk`
`subdomain.65.hk:8080`
这种方式适合你不想依赖 `URL`/`URI` 解析器时使用。
✅ 方法四:去除子域名(只保留主域名)
如果你想提取 顶级域名(TLD)和注册域名(例如 `65.hk` 而不是 `www.65.hk`),可以用第三方库,如 [Public Suffix List](https://github.com/publicsuffix/list)。
使用 [PublicSuffixList](https://github.com/publicsuffix/list)(推荐):
添加依赖(Maven):
xml
<dependency
<groupIdcom.github.publicsuffix</groupId
<artifactIdpublicsuffixlist</artifactId
<version1.2.0</version
</dependency
代码示例:
java
import com.github.publicsuffix.PublicSuffixList;
import com.github.publicsuffix.PublicSuffixListLoader;
public class ExtractBaseDomain {
public static void main(String[] args) throws Exception {
PublicSuffixList list = PublicSuffixListLoader.load();
String domain = www.65.hk;
String baseDomain = list.getBaseDomain(domain);
System.out.println(基础域名: + baseDomain); // 输出: 65.hk
}
}
该库能正确识别 `.co.uk`, `.com.cn` 等复杂 TLD。
✅ 总结:如何选择?
| 需求 | 推荐方法 |
| 从 URL 中提取域名 | `new URL(url).getHost()` |
| 从字符串中提取域名 | 正则表达式 |
| 提取“根域名”(如 65.hk) | 使用 `PublicSuffixList` |
| 处理 HTTPS、端口等 | `URL` / `URI` |
🔍 示例:完整功能函数
java
import java.net.URL;
import java.net.MalformedURLException;
public class DomainExtractor {
public static String getDomainFromUrl(String urlStr) {
try {
URL url = new URL(urlStr);
return url.getHost();
} catch (MalformedURLException e) {
throw new IllegalArgumentException(无效的 URL: + urlStr);
}
}
public static void main(String[] args) {
String url = https://www.google.com:443/search?q=java;
System.out.println(域名: + getDomainFromUrl(url)); // 输出: www.google.com
}
}
✅ 提示:
如果你要处理大量域名,请考虑使用 `PublicSuffixList` 来正确分离主域名。
对于非标准 URL(如 `ftp://`、`mailto:`),建议先做校验。
如需进一步帮助(如提取二级域名、判断是否为合法域名等),欢迎继续提问!
📣 商家广告 :
👍
0
👎
IP地址: 239.50.46.81
搜索次数: 0
提问时间: 2025-11-03 09:57:04
🛒 域名购买 :
wc.chat xuanhuo.com.cn bd.gs s-y.com.cn jqr.hk wz.chat rdqq.cn zhang.la s-k.com.cn w-p.cn
❓️ 热门提问 :
电商电商运营托管 网站域名注册免费 标准云服务器 dns 服务器对区域没有权威 云挂机破解版 vps免费使用 120是公网ip吗 vps速度慢 云服务器买谁家的好 代理ip 主机 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
g-a.com.cn axir.cn c.gz.cn w-f.com.cn vision2100.net.cn at.cq.cn t-v.com.cn 80.gs naiwang.com.cn 3lll.cn
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
贵阳用友政务
Código fuente del motor de búsqueda
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。