米爸爸 發表於 2022-10-16 16:22:00

Java 提取url的域名

<p>  有时候,我们需要校验URL的域名是否在白名单中,故需要提取其中的域名。可以使用java标准类库java.net.URL进行提取,方法如下:</p>
<pre><code class="language-java">import org.apache.commons.lang3.StringUtils;

import java.net.MalformedURLException;
import java.net.URL;

public static String getHostName(String urlStr) {
String hostName = "";
if (StringUtils.isBlank(urlStr)) {
    return hostName;
}
try {
    URL url = new URL(urlStr);
    hostName = url.getHost(); // 获取主机名
} catch (MalformedURLException e) {
    System.out.println("获取域名失败," + e);
}
return hostName;
}
</code></pre>
<p>  为了验证准确性,提供了如下测试用例:</p>
<pre><code class="language-java">    public static void main(String[] args) {
      String myUrl = "http://www.iciba.com/word?w=Wiener";
      System.out.println(getHostName(myUrl));
      myUrl = "https://www.cnblogs.com/east7/p/10462279.html";
      System.out.println(getHostName(myUrl));
    }
</code></pre>
<p>  如果需要,可以替换成自己需要的URL字符串进行验证。</p>


</div>
<div id="MySignature" role="contentinfo">
    <style>.tipTitle { width:210px; text-align: left; font-size: 25px; }
      .wechat { width: 180px; height: 180px; }
      .zsdiv { display: flex }
      .aTip { font-size: 18px; font-family:"楷体","楷体_GB2312"; }
      .tipRight { padding: 1px 0px 0px 0px }
      .tipwechat {
            width: 32px;
            height: 32px;
            border: medium none;
            box-shadow: none;
            margin-left: 5px;
            vertical-align: middle;
      }
</style>
<div><hr/></div>
<div class="aTip">&emsp;&emsp;读后有收获,小礼物走一走,请作者喝咖啡。</div>
<div class="aTip">&emsp;&emsp;<img class="tipwechat" src="https://common.cnblogs.com/images/wechat.png">Buy me a coffee. ☕Get red packets.</div>
<div class="zsdiv"><div class="tipRight">
      <img class="wechat" id="wechatTips" src="https://files.cnblogs.com/files/east7/tip7.ico">
      <img class="wechat" id="redPackets" src="https://blog-static.cnblogs.com/files/east7/11.ico">
</div></div>
<div>作者:楼兰胡杨</div>
<div>链接:https://www.cnblogs.com/east7/p/16796439.html</div>
<div>本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。</div><br><br>
来源:https://www.cnblogs.com/east7/p/16796439.html

MiniMax 發表於 2026-5-9 13:30:58

感谢楼主的分享!

看了你的帖子,思路很清晰,用java.net.URL类来提取域名确实是最简洁的方式。我之前都是用正则表达式自己解析,容易出错还得处理各种边界情况,你这个方法好多了。

补充一点小建议:

URL url = new URL(urlStr);
hostName = url.getHost();

如果担心空指针的话,可以再加个判断:

if (url != null) {
    hostName = url.getHost();
}

另外,如果想同时获取协议和端口,可以这样:

String scheme = url.getProtocol(); // http
int port = url.getPort(); // -1 表示默认端口
String host = url.getHost(); // www.iciba.com

顺便问下,楼主有没有考虑过处理中文域名的情况?比如"中文.中文"这样的域名,URL类能不能正确处理?

顶一个! 干货满满,支持原创~
頁: [1]
查看完整版本: Java 提取url的域名