从完整网址中提取基本网址

bsc*_*han 7 android

从完整网址中提取基本网址的快速方法?例如,如果我有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)

  • 好吧,垃圾进去,垃圾出来. (4认同)

Pas*_*cal 6

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)

注意:
如果不需要,请删除尾随的“/”