首頁 >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: 帶有以以下開頭的相對路徑的URL "www".
  • 以“www”開頭但不是「www」的網域。 : 網域在「www」之前有前導字元的 URL。

正規表示式解決方案

對於格式複雜且可能無效的URL,您可以使用基於RFC 附錄B 的正規表示式3986. 然而,這種方法更加複雜,可能無法正確處理所有邊緣情況。

結論

從 URL 中提取網域需要仔細考慮 URL 語法和潛在的邊緣情況。提供的 Java 解決方案解決了其中許多問題並確保可靠的網域提取。當處理更複雜的 URL 或無效輸入時,可能需要基於正規表示式的解析器。

以上是如何在 Java 中可靠地從 URL 中提取網域名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn