10
A
回答
30
你想是这样的:
String path = new URL("http://www.costo.com/test1/test2").getPath();
其实这会给你/test1/test2
。你只需要删除第一/
得到你想要的东西:
path = path.replaceFirst("/", "");
现在,您可以path
有test1/test2
。
4
2
使用URL
类的URL.getPath()
方法。
1
你可以这样做:
URL url = new URL("http://www.costo.com/test1/test2");
System.out.println(url.getPath());
4
我不得不使用Java URL类从URL只是提取路径性能的怀疑和认为这是矫枉过正。
因此我写了三种方法,它们都使用不同的方式从给定的URL中提取路径。
- 第1种方法使用来自Java URL类的URL.getPath方法。
- 第二种方法使用正则表达式我在SO中找到了(我失去了源代码链接,否则我会在这里给作者点数)。
- 第三种方法使用数组拆分并加入获得相同的结果。
对于给定的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;
}
+0
切勿使用'System.currentTimeMillis()'进行微基准测试。使用nano,这更准确。请记住,这不是一个真正的基准测试,我强烈建议使用基准测试工具,http://openjdk.java.net/projects/code-tools/jmh/ – Panthro 2017-08-25 11:50:54
相关问题
- 1. 如何从文件URL获取路径?
- 2. jquery - 获取url路径?
- 3. 获取URL路径URL链接(PHP)
- 4. 获取视频的URL和路径
- 5. 获取相对CSS URL路径的Javascript
- 6. 获取java中url的绝对路径
- 7. 如何获取R.java路径?
- 8. 如何获取%CD的父路径%如何获取当前%CD%的父路径%
- 9. 如何获得URL的路径名不带路径
- 10. 获取没有url参数的MVC路径路径
- 11. 实用程序从URL获取路径
- 12. asp.net获取路径页文件夹URL
- 13. 获取URL文件路径(PHP)
- 14. 如何从jar下的相对路径获取URL?
- 15. 如何获取Jersey中传入URL的路径值?
- 16. 如何获取URL路径中的子目录?
- 17. 如何获取Sitecore 7.2中一般链接的url路径C#
- 18. 如何获取URL中的最后一个路径?
- 19. 如何在Delphi中从绝对路径获取文件的URL?
- 20. 如何获取Vaadin资源路径的URL?
- 21. 如何获取ggmap路径数据以跟踪道路路径
- 22. 如何获取CalCalendarItem的文件路径?
- 23. 如何获取dll的相对路径?
- 24. 如何获取py文件的路径?
- 25. 如何获取Groovy中的类路径?
- 26. 如何获取当前html的路径?
- 27. 如何获取SVG路径的ID
- 28. 如何获取抛出UnauthorizedAccessException的路径?
- 29. 如何获取关键路径的NSExpression?
- 30. 如何在AngularJS中获取当前路径的路径名?
的人感觉这个尝试后哑,请注意,这不是JavaScript代码。这是java – 2017-08-01 20:15:11