🗣 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地址: 54.132.245.63
搜索次数: 6
提问时间: 2025-12-22 10:21:52
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。