Saltar al contenido

Cómo obtener la ruta de una URL

Este team especializado pasados algunos días de trabajo y de recopilar de datos, obtuvimos los datos necesarios, nuestro deseo es que te sea útil para tu trabajo.

Solución:

Quieres algo como esto:

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

En realidad eso te dará /test1/test2. Solo tendrás que quitar el primero. / para conseguir lo que quieres:

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

ahora tendrás test1/test2 en path.

Tenía dudas sobre el rendimiento al usar la clase URL de Java solo para extraer la ruta de una URL y pensé que esto era una exageración.

Por lo tanto, escribí tres métodos, todos los cuales usan una forma diferente de extraer la ruta de una URL determinada.

  1. El primer método utiliza el URL.getPath método de la clase URL de Java.
  2. El segundo método utiliza un expresiones regulares Encontré en SO (perdí el enlace de origen, de lo contrario le daría créditos al autor aquí mismo).
  3. El tercer método utiliza un array-dividir y unir por obtener el mismo resultado.

Los tres métodos se invocan 1000000 veces para una URL determinada.

El resultado es:

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

Código – siéntete libre de optimizarlo:

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;
    

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

Ver también

  • Javadoc

Comentarios y valoraciones

Puedes defender nuestra misión exponiendo un comentario y valorándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *