2011-04-06 14 views

उत्तर

30

प्राप्त करने के लिए आप कुछ इस तरह हैं:

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

वास्तव में है कि आप /test1/test2 दे देंगे। तुम बस पहले / दूर करने के लिए आप क्या चाहते हैं पाने के लिए होगा:

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

अब आप path में test1/test2 होगा।

+2

किसी को भी इस कोशिश कर के बाद गूंगा महसूस कर के लिए, ध्यान दें कि यह जावास्क्रिप्ट कोड नहीं है। यह जावा –

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

भी देखें

2

उपयोग URL वर्ग के URL.getPath() विधि।

1

आप ऐसा कर सकते हैं:

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

मैं सिर्फ एक यूआरएल से पथ निकालने के लिए जावा यूआरएल वर्ग का उपयोग कर प्रदर्शन संदेह था और सोचा कि यह एक overkill है।

इसलिए मैंने तीन विधियों को लिखा, जो सभी किसी दिए गए यूआरएल से पथ निकालने के लिए एक अलग तरीके का उपयोग करते हैं।

  1. 1 विधि जावा यूआरएल वर्ग से URL.getPath विधि का उपयोग करता।
  2. दूसरी विधि regex का उपयोग करता है जो मैंने पाया है (मैंने स्रोत लिंक खो दिया है, अन्यथा मैं यहां लेखक को क्रेडिट दूंगा)।
  3. तीसरी विधि सरणी-विभाजन का उपयोग करती है और एक ही परिणाम प्राप्त करने के लिए में शामिल होती है।

किसी दिए गए यूआरएल के लिए सभी तीन तरीकों को 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() 'का उपयोग न करें। नैनो का प्रयोग करें, जो अधिक सटीक है। और ध्यान रखें कि यह वास्तविक बेंचमार्क नहीं है, मैं दृढ़ता से इसके लिए एक बेंचमार्किंग टूल का उपयोग करने की सलाह देता हूं, http://openjdk.java.net/projects/code-tools/jmh/ – Panthro