web-dev-qa-db-fra.com

Comment obtenir le chemin d'une URL

Avoir une URL, comment récupérer sa partie chemin?

http://www.costo.com/test1/test2

Comment obtenir "test1/test2"

15
user496949

Vous voulez quelque chose comme ça:

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

En fait, ça va vous donner /test1/test2. Il vous suffira de supprimer le premier / pour obtenir ce que vous voulez:

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

Maintenant, vous aurez test1/test2 dans path.

40
WhiteFang34

J'avais des doutes sur les performances en utilisant la classe d'URL Java pour extraire simplement le chemin d'accès d'une URL et je pensais que c'était une surcharge.

Par conséquent, j’ai écrit trois méthodes, qui utilisent toutes une méthode différente pour extraire le chemin à partir d’une URL donnée.

  1. La 1ère méthode utilise la méthode URL.getPath de la classe d'URL Java.
  2. La 2ème méthode utilise un regex j'ai trouvé dans SO (j'ai perdu le lien source, sinon je donnerais des crédits à l'auteur juste ici).
  3. La 3ème méthode utilise un array-split et join pour obtenir le même résultat.

Les trois méthodes sont appelées 1 000 fois pour une URL donnée.

Le résultat est:

#1 (getPathviaURL)   took:    860ms
#2 (getPathViaRegex) took:   3763ms
#3 (getPathViaSplit) took:   1365ms

Code - n'hésitez pas à l'optimiser:

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;
    }
8
Aydin K.
 URL url = new  URL("http://www.google.com/in/on");
 System.out.println(url.getPath());

Voir aussi

6
Jigar Joshi

utilisez la méthode URL.getPath() de URL class.

3
Vladimir Ivanov

Tu peux le faire:

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

Si vous voulez l'obtenir à partir de l'URL de votre application, par exemple, entrez http: // localhost: 8080/test1/test2/main.jsp . Utiliser peut utiliser

request.getRequestURI() //result will be like test1/test2
0
Bhaskara Arani