没有字符串拆分的URL解析

时间:2016-06-17 10:34:55

标签: java string parsing url

Java有很酷的URL解析器

import java.net.*;
import java.io.*;

public class ParseURL {
public static void main(String[] args) throws Exception {

    URL aURL = new URL("http://example.com:80/docs/books/tutorial"
                       + "/index.html?name=networking#DOWNLOADING");

    System.out.println("path = " + aURL.getPath());
}
}

以下是程序显示的输出:

path = /docs/books/tutorial/index.html

我只想采取这一部分:docs/books/tutorial(或/docs/books/tutorial/)猜测不要使用字符串拆分,我正在为此任务寻找其他更好的解决方案。

提前谢谢

4 个答案:

答案 0 :(得分:2)

String path = "/docs/books/tutorial/index.html";
path = path.substring(1, path.lastIndexOf("/"));

给出docs/books/tutorial

答案 1 :(得分:2)

您可以使用文件对象执行此操作,而不是拆分字符串:

工作示例:

import java.io.File;
import java.net.URL;

public class ParseURL {
    public static void main(String[] args) throws Exception {

        URL aURL = new URL("http://example.com:80/docs/books/tutorial"
                           + "/index.html?name=networking#DOWNLOADING");

        System.out.println("path = " + aURL.getPath());

        File file = new File(aURL.getPath());

        System.out.println("pathOnly = " + file.getParent());
    }
}

输出:

path = /docs/books/tutorial/index.html
pathOnly = /docs/books/tutorial

答案 2 :(得分:2)

有几种方法。其中一个使用URI#resolve("."),其中.代表当前目录。所以你的代码看起来像:

URI uri = new URI("http://example.com:80/docs/books/tutorial"
        + "/index.html?name=networking#DOWNLOADING");
System.out.println(uri.resolve(".").getPath());

输出:/docs/books/tutorial/

其他方式可能涉及文件系统和处理它的类,如File或其在Java 7 Path(及其实用程序类Paths)中引入的改进版本。
这些类应该允许您解析path

/docs/books/tutorial/index.html

并获取其父位置/docs/books/tutorial

URL aURL = new URL("http://example.com:80/docs/books/tutorial"
        + "/index.html?name=networking#DOWNLOADING");

String path = aURL.getPath();
String parent = Paths.get(path).getParent().toString();

System.out.println(parent);// \docs\books\tutorial

(小警告:根据您的操作系统,您可能会使用\而非/分隔路径

答案 3 :(得分:1)

以此为例:

public static String getCustomPath() {
    String path = "/docs/books/tutorial/index.html";
    String customPath = path.substring(0, path.indexOf("index.html"));
    return customPath;
}