答案 1
你想要这样的东西:
String path = new URL("http://www.costo.com/test1/test2").getPath();
实际上,这将给你.您只需要删除第一个即可获得所需的内容:/test1/test2
/
path = path.replaceFirst("/", "");
现在,您将拥有 .test1/test2
path
答案 2
我对使用Java URL类仅从URL中提取路径的性能有疑问,并认为这是一个过度的。
因此,我编写了三种方法,它们都使用不同的方法从给定的URL中提取路径。
- 第一种方法使用 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;
}
推荐
-
如何在java中检查给定的域名http或https? 我的问题 在我的Android应用程序中,我从用户那里获得url输入,例如“www.google.com”。 我想找出给定的网址是否使用或. 我尝试过什么 在参考了一些堆栈溢出问题之后,我尝试了getScheme()
-
Java : File.toURI().toURL() on Windows file 我运行的系统是Windows XP,带有JRE 1.6。 我这样做: 文件 URL 的颁发机构部分似乎为空或空,因此跳过了双斜杠。那么URL的权威部分是什么,它真的没有在文件协议中吗?
-
在 Java 中打开 URL 以获取内容 我正在寻找一个用java打开网址的机会。 (by url.openConnection()) 我的问题是什么? 我使用带有servlet的tomcat服务器,...
-
-
使用 HttpsURLConnection 忽略 SSL 证书的方法 我使用两种方法来尝试使用HTTPS URL: 旧的已弃用,并返回具有正确值的响应。 这是它不需要忽略ssl证书的代码,它自己忽略它,或者可能使用其他技术:
标签
推荐