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.
- El primer método utiliza el URL.getPath método de la clase URL de Java.
- 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).
- 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.