从完整网址中提取基本网址的快速方法?例如,如果我有http://test.example.com/abcd/test.html - 我只想http://test.example.com.
我总是可以进行字符串解析 - 但是想知道Uri中是否有东西我可以直接获取它.
gnu*_*nuf 25
关于什么:
import java.net.URL;
import java.net.MalformedURLException;
try
{
URL url = new URL("http://test.example.com/abcd/test.html");
String baseUrl = url.getProtocol() + "://" + url.getHost();
}
catch (MalformedURLException e)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
java.net.URL文档可以帮助您了解如何“从完整 url 中提取基本 url”
初步说明:
应注意URL javadoc 页面中的这一重要注释:
“请注意,URI 类在某些情况下确实会对其组件字段执行转义。管理 URL 编码和解码的推荐方法是使用 URI,并使用toURI()和URI.toURL()在这两个类之间进行转换”。
不言自明的单元测试:
这里有 2 个简单的单元测试来说明“基本 Url”概念
package com.elementique.web;
import org.junit.Test;
import java.net.URI;
import java.net.URL;
import static org.junit.Assert.assertEquals;
public class UrlTest {
@Test
public void baseUrlAuthority() throws Exception {
URL url = URI.create("http://username:password@host1:8080/directory/file?query#ref").toURL();
assertEquals("http", url.getProtocol()); // protocol is also known as 'scheme'
assertEquals("username:password@host1:8080", url.getAuthority());
String baseUrlAuthority= url.getProtocol() + "://" + url.getAuthority();
assert (url.toString().startsWith(baseUrlAuthority));
}
@Test
public void baseUrlHostAndDefaultPort() throws Exception {
URL url = URI.create("http://host2/a/b/c").toURL();
assertEquals(-1, url.getPort()); // -1 as port is not defined in this case
String baseUrlHostAndDefaultPort= url.getProtocol() + "://" + url.getHost();
assert (url.toString().startsWith(baseUrlHostAndDefaultPort));
}
}
Run Code Online (Sandbox Code Playgroud)
提取基本 URL:
因此,“从完整 url 中提取基本 url”可以这样完成:
return url.getProtocol()+"://"+url.getAuthority()+"/"
Run Code Online (Sandbox Code Playgroud)
或者这个,如果您不需要用户名/密码部分
if(url.getPort() == -1){ // port is not
return url.getProtocol()+"://"+url.getHost()+"/";
} else {
return url.getProtocol()+"://"+url.getHost()+":"+url.getPort()+"/";
}
Run Code Online (Sandbox Code Playgroud)
执行:
这是一个执行此操作的实现(基于 getAuthority() ):
public static String getBaseUrl(String urlString)
{
if(urlString == null)
{
return null;
}
try
{
URL url = URI.create(urlString).toURL();
return url.getProtocol() + "://" + url.getAuthority() + "/";
}
catch (Exception e)
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:
如果不需要,请删除尾随的“/”
| 归档时间: |
|
| 查看次数: |
13052 次 |
| 最近记录: |