如何从Java中的绝对URL中提取相对URL

时间:2015-06-15 11:28:48

标签: java

我有这个网站:

https://asd.com/somestuff/another.html

我想从中提取相关部分:

somestuff/another.html

我该怎么做?

编辑:我得到了一个问题的答案,但问题是建立了亲属的绝对网址,这不是我感兴趣的。

6 个答案:

答案 0 :(得分:7)

您可以使用URL对象的getPath()方法:

URL url = new URL("https://asd.com/somestuff/another.html");
System.out.println(url.getPath());  // prints "/somestuff/another.html"

现在,这只会带来实际路径。如果您需要更多信息(锚点或作为获取值传递的参数),您需要调用URL对象的其他访问者:

URL url = new URL("https://asd.com/somestuff/another.html?param=value#anchor");
System.out.println(url.getPath());  // prints "/somestuff/another.html"
System.out.println(url.getQuery()); // prints "param=value"
System.out.println(url.getRef());   // prints "anchor"

基于Hiru's answer

,可能会在没有太多代码的情况下生成相对网址
URL absolute = new URL(url, "/");
String relative = url.toString().substring(absolute.toString().length());
System.out.println(relative); // prints "somestuff/another.html?param=value#anchor"

答案 1 :(得分:2)

如果您知道该域名将永远是.com,那么您可以尝试这样的事情:

String url = "https://asd.com/somestuff/another.html";
String[] parts = url.split(".com/");
//parts[1] is the string after the .com/

答案 2 :(得分:1)

URL由以下元素组成(请注意,省略了一些可选元素): 1)计划 2)主机名 3)[端口] 4)路径 5)查询 6)片段 使用Java URL API,您可以执行以下操作:

URL u = new URL("https://randomsite.org/another/randomPage.html");
System.out.println(u.getPath());

编辑#1 如果您的网址中包含查询元素,请参阅Chop的答案,例如

?name=foo&value=bar

使用getQuery()方法不会返回资源路径,只返回查询部分。

答案 3 :(得分:1)

试试这个

全球使用它不仅适用于.com

    URL u=new URL("https://asd.in/somestuff/another.html");
    String u1=new URL(u, "/").toString();
    String u2=u.toString();
    String[] u3=u2.split(u1);
    System.out.println(u3[1]); //it prints:   somestuff/another.html

答案 4 :(得分:1)

您可以使用以下代码段执行此操作。

 String str="https://asd.org/somestuff/another.html";
    if(str.contains("//")) //To remove any protocol specific header.
    {
        str=str.split("//")[1];
    }
    System.out.println(str.substring(str.indexOf("/")+1)); // taking the first '/'

答案 5 :(得分:0)

我基于java.net.URI的解决方案

URI _absoluteURL = new URI(absoluteUrl).normalize();
String root = _absoluteURL.getScheme() + "://" + _absoluteURL.getAuthority();
URI relative = new URI(root).relativize(_absoluteURL);

String result = relative.toString();