Java 如何获取URL的路径
有一个URL,如何检索其路径部分Java 如何获取URL的路径,java,url,uri,Java,Url,Uri,有一个URL,如何检索其路径部分 如何获取“test1/test2”您想要这样的东西: String path = new URL("http://www.costo.com/test1/test2").getPath(); 实际上,这将为您提供/test1/test2。您只需删除第一个/,即可获得所需: path = path.replaceFirst("/", ""); 现在,您将在路径中设置test1/test2 URL url = new URL("http://www.goo
如何获取“test1/test2”您想要这样的东西:
String path = new URL("http://www.costo.com/test1/test2").getPath();
实际上,这将为您提供/test1/test2
。您只需删除第一个/
,即可获得所需:
path = path.replaceFirst("/", "");
现在,您将在路径中设置test1/test2
URL url = new URL("http://www.google.com/in/on");
System.out.println(url.getPath());
另请参见
使用类的URL.getPath()
方法。您可以执行以下操作:
URL url = new URL("http://www.costo.com/test1/test2");
System.out.println(url.getPath());
我对使用JavaURL类仅仅从URL中提取路径的性能表示怀疑,并认为这是一种过激行为
因此,我编写了三种方法,它们都使用不同的方法从给定URL提取路径
第一个方法使用JavaURL类中的URL.getPath方法
第二种方法使用我在SO中找到的regex(我丢失了源链接,否则我会在这里给作者评分)
第三种方法使用数组拆分和联接来获得相同的结果
对于给定的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;
}
publicstaticvoidmain(字符串[]args){
字符串主机=”http://stackoverflow.com/questions/5564998/how-to-get-the-path-of-a-url";
long start1=System.currentTimeMillis();
int i=0;
而(i<1000000){
getPathviaURL(主机);
i++;
}
long-end1=System.currentTimeMillis();
println(“#1(getPathviaURL)取“+(end1-start1)+”ms”);
模式p=Pattern.compile(((?:([^:\/?\/?\]+):)(?:\/\\/([^\\/?\]*))([^?\\]*)(?:\?([^ \]*))(?:\?([^ \]*)(?:\(*)(?:。);
long start2=System.currentTimeMillis();
int i2=0;
而(i2<1000000){
getPathViaRegex(主机,p);
i2++;
}
long-end2=System.currentTimeMillis();
System.out.println(“#2(getPathViaRegex)取“+(end2-start2)+”ms”);
long start3=System.currentTimeMillis();
int i3=0;
而(i3<1000000){
getPathViaSplit(主机);
i3++;
}
long-end3=System.currentTimeMillis();
System.out.println(“#3(getPathViaSplit)取“+(end3-start3)+”ms”);
}
公共静态字符串getPathviaURL(字符串url){
字符串路径=null;
试一试{
路径=新URL(URL).getPath();
}捕获(格式错误){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回路径;
}
公共静态字符串getPathViaRegex(字符串url,模式p){
Matcher m=p.Matcher(url);
if(m.find()){
返回m组(3);
}
返回null;
}
公共静态字符串getPathViaSplit(字符串url){
String[]parts=url.split(“/”);
parts=Arrays.copyOfRange(parts,3,parts.length);
字符串连接=“/”+StringUtils.join(部分“/”);
回归加入;
}
如果您想从应用程序的url获取它,例如。
使用可以使用
request.getRequestURI() //result will be like test1/test2
如果有人在尝试后觉得自己很笨,请注意,这不是javascript代码。不要使用System.currentTimeMillis()
进行微观基准测试。使用纳米,这是更准确的。请记住,这不是一个真正的基准,我强烈建议为此使用基准工具,更重要的是,不要过早地进行优化。我无法想象这是应用程序中的瓶颈:-)