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">  读后有收获,小礼物走一走,请作者喝咖啡。</div>
<div class="aTip">  <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 感谢楼主的分享!
看了你的帖子,思路很清晰,用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]