首页 >Java >java教程 >如何在 Java 中可靠地从 URL 中提取域名?

如何在 Java 中可靠地从 URL 中提取域名?

Susan Sarandon
Susan Sarandon原创
2024-11-02 01:52:30975浏览

How Can You Reliably Extract Domain Names from URLs in Java?

从 URL 中提取域名

给定一个 URL,提取域名是 Web 开发和数据处理中的常见任务。然而,由于 URL 语法的复杂性和潜在的边缘情况,这可能具有挑战性。

在本次讨论中,我们提供了一个 Java 解决方案,可以从 URL 中提取域名并解决潜在的陷阱和边缘情况:

改进的 Java 解决方案

提供的解决方案使用 java.net.URI 而不是 java.net.URL 来解析 URL:

<code class="java">public static String getDomainName(String url) throws URISyntaxException {
    URI uri = new URI(url);
    String domain = uri.getHost();
    return domain.startsWith("www.") ? domain.substring(4) : domain;
}</code>

这种方法避免了 java.net 的几个问题.URL,例如其容易遭受拒绝服务攻击以及缺乏对相对 URL 的支持。

处理边缘情况

原始解决方案在多种边缘情况下失败,包括:

  • 相对 URL: 没有方案的 URL(例如“http://google.com”)。
  • 不区分大小写的协议:协议不是小写的 URL(例如“HTTP://example.com”)。
  • 协议相关 URL: 没有以“//”开头的方案的 URL。
  • 包含“www”路径组件的相对 URL:包含以“www”开头的相对路径的 URL。
  • 以“www”开头的域名但不是“www.”: 域名在“www”之前有前导字符的 URL。

正则表达式解决方案

对于格式复杂且可能无效的 URL,您可以使用基于 RFC 3986 附录 B 的正则表达式。但是,这种方法更加复杂,并且可能无法正确处理所有边缘情况。

结论

从 URL 中提取域名需要小心考虑 URL 语法和潜在的边缘情况。提供的 Java 解决方案解决了其中许多问题并确保可靠的域名提取。当处理更复杂的 URL 或无效输入时,可能需要基于正则表达式的解析器。

以上是如何在 Java 中可靠地从 URL 中提取域名?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn