如何获取URL的路径

时间:2011-04-06 10:38:35

标签: java url uri

有一个URL,如何检索其路径部分?

http://www.costo.com/test1/test2

如何获得“test1 / test2”

6 个答案:

答案 0 :(得分:43)

你想要这样的东西:

String path = new URL("http://www.costo.com/test1/test2").getPath();

实际上,它会给你/test1/test2。您只需删除第一个/即可获得所需内容:

path = path.replaceFirst("/", "");

现在,test1/test2中有path

答案 1 :(得分:8)

我使用Java URL类来解析URL中的路径并认为这是一种矫枉过正的行为存在疑问。

因此,我写了三个方法,它们都使用不同的方法从给定的URL中提取路径。

  1. 第一种方法使用Java URL类中的 URL.getPath 方法。
  2. 第二种方法使用我在SO中找到的正则表达式(我丢失了源链接,否则我会在这里给予作者信用)。
  3. 第三种方法使用数组拆分和连接来获得相同的结果。
  4. 对于给定的URL,所有三种方法都被调用了1000000次。

    结果是:

    #1 (getPathviaURL)   took:    860ms
    #2 (getPathViaRegex) took:   3763ms
    #3 (getPathViaSplit) took:   1365ms
    

    代码 - 随意优化它:

    public static void main(String[] args) {
    
    
            String host = "http://stackoverflow.com/questions/5564998/how-to-get-the-path-of-a-url";
    
            long start1 = System.currentTimeMillis();
            int i = 0;
            while (i < 1000000) {
                getPathviaURL(host);
                i++;
            }
            long end1 = System.currentTimeMillis();
    
            System.out.println("#1 (getPathviaURL) took: " + (end1 - start1) + "ms");
            Pattern p = Pattern.compile("(?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?");
    
            long start2 = System.currentTimeMillis();
            int i2 = 0;
            while (i2 < 1000000) {
                getPathViaRegex(host, p);
                i2++;
            }
            long end2 = System.currentTimeMillis();
            System.out.println("#2 (getPathViaRegex) Took: " + (end2 - start2) + "ms");
    
            long start3 = System.currentTimeMillis();
            int i3 = 0;
            while (i3 < 1000000) {
                getPathViaSplit(host);
                i3++;
            }
            long end3 = System.currentTimeMillis();
            System.out.println("#3 (getPathViaSplit) took: " + (end3 - start3) + "ms");
    
    
    
        }
    
        public static String getPathviaURL(String url) {
            String path = null;
            try {
                path = new URL(url).getPath();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return path;
        }
    
        public static String getPathViaRegex(String url, Pattern p) {
            Matcher m = p.matcher(url);
    
            if (m.find()) {
                return m.group(3);
            }
            return null;
        }
    
        public static String getPathViaSplit(String url) {
            String[] parts = url.split("/");
    
            parts = Arrays.copyOfRange(parts, 3, parts.length);
            String joined = "/" + StringUtils.join(parts, "/");
    
            return joined;
        }
    

答案 2 :(得分:7)

 URL url = new  URL("http://www.google.com/in/on");
 System.out.println(url.getPath());

另见

答案 3 :(得分:3)

使用URL类的URL.getPath()方法。

答案 4 :(得分:3)

你可以这样做:

    URL url = new URL("http://www.costo.com/test1/test2");
    System.out.println(url.getPath());

答案 5 :(得分:0)

如果您想从应用程序的URL中获取它,例如http://localhost:8080/test1/test2/main.jsp。 使用可以使用

request.getRequestURI() //result will be like test1/test2