का मार्ग कैसे प्राप्त करें एक यूआरएल है, इसका पथ भाग कैसे प्राप्त करें?यूआरएल
http://www.costo.com/test1/test2
कैसे "test1/test2"
का मार्ग कैसे प्राप्त करें एक यूआरएल है, इसका पथ भाग कैसे प्राप्त करें?यूआरएल
http://www.costo.com/test1/test2
कैसे "test1/test2"
प्राप्त करने के लिए आप कुछ इस तरह हैं:
String path = new URL("http://www.costo.com/test1/test2").getPath();
वास्तव में है कि आप /test1/test2
दे देंगे। तुम बस पहले /
दूर करने के लिए आप क्या चाहते हैं पाने के लिए होगा:
path = path.replaceFirst("/", "");
अब आप path
में test1/test2
होगा।
URL url = new URL("http://www.google.com/in/on");
System.out.println(url.getPath());
भी देखें
उपयोग URL
वर्ग के URL.getPath()
विधि।
आप ऐसा कर सकते हैं:
URL url = new URL("http://www.costo.com/test1/test2");
System.out.println(url.getPath());
मैं सिर्फ एक यूआरएल से पथ निकालने के लिए जावा यूआरएल वर्ग का उपयोग कर प्रदर्शन संदेह था और सोचा कि यह एक overkill है।
इसलिए मैंने तीन विधियों को लिखा, जो सभी किसी दिए गए यूआरएल से पथ निकालने के लिए एक अलग तरीके का उपयोग करते हैं।
किसी दिए गए यूआरएल के लिए सभी तीन तरीकों को 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;
}
माइक्रो बेंचमार्किंग के लिए 'System.currentTimeMillis() 'का उपयोग न करें। नैनो का प्रयोग करें, जो अधिक सटीक है। और ध्यान रखें कि यह वास्तविक बेंचमार्क नहीं है, मैं दृढ़ता से इसके लिए एक बेंचमार्किंग टूल का उपयोग करने की सलाह देता हूं, http://openjdk.java.net/projects/code-tools/jmh/ – Panthro
किसी को भी इस कोशिश कर के बाद गूंगा महसूस कर के लिए, ध्यान दें कि यह जावास्क्रिप्ट कोड नहीं है। यह जावा –