Cómo obtener el último segmento de ruta de un uri

Tengo en entrada una cadena que es un URI . ¿cómo es posible obtener el último segmento de ruta? que en mi caso es una identificación?

Esta es mi url de entrada

 String uri = "http://base_path/some_segment/id" 

Y tengo que obtener la identificación que he probado con esto

 String strId = "http://base_path/some_segment/id"; strId=strId.replace(path); strId=strId.replaceAll("/", ""); Integer id = new Integer(strId); return id.intValue(); 

pero no funciona y seguro hay una mejor manera de hacerlo.

Es esto lo que estás buscando:

 URI uri = new URI("http://example.com/foo/bar/42?param=true"); String path = uri.getPath(); String idStr = path.substring(path.lastIndexOf('/') + 1); int id = Integer.parseInt(idStr); 

alternativamente

 URI uri = new URI("http://example.com/foo/bar/42?param=true"); String[] segments = uri.getPath().split("/"); String idStr = segments[segments.length-1]; int id = Integer.parseInt(idStr); 
 import android.net.Uri; Uri uri = Uri.parse("http://example.com/foo/bar/42?param=true"); String token = uri.getLastPathSegment(); 

Aquí hay un breve método para hacerlo:

 public static String getLastBitFromUrl(final String url){ // return url.replaceFirst("[^?]*/(.*?)(?:\\?.*)","$1);" <-- incorrect return url.replaceFirst(".*/([^/?]+).*", "$1"); } 

Código de prueba:

 public static void main(final String[] args){ System.out.println(getLastBitFromUrl( "http://example.com/foo/bar/42?param=true")); System.out.println(getLastBitFromUrl("http://example.com/foo")); System.out.println(getLastBitFromUrl("http://example.com/bar/")); } 

Salida:

42
foo
bar

Explicación:

 .*/ // find anything up to the last / character ([^/?]+) // find (and capture) all following characters up to the next / or ? // the + makes sure that at least 1 character is matched .* // find all following characters $1 // this variable references the saved second group from above // Ie the entire string is replaces with just the portion // captured by the parentheses above 

Sé que esto es viejo, pero las soluciones aquí parecen bastante prolijas. Simplemente un trazador de líneas de fácil lectura si tienes una URL o URI :

 String filename = new File(url.getPath()).getName(); 

O si tienes un String :

 String filename = new File(new URL(url).getPath()).getName(); 

En Java 7+, algunas de las respuestas anteriores se pueden combinar para permitir la recuperación de cualquier segmento de ruta desde un URI, en lugar de solo el último segmento. Podemos convertir el URI en un objeto java.nio.file.Path , para aprovechar su método getName(int) .

Desafortunadamente, la fábrica estática Paths.get(uri) no está diseñada para manejar el esquema http, por lo que primero debemos separar el esquema de la ruta del URI.

 URI uri = URI.create("http://base_path/some_segment/id"); Path path = Paths.get(uri.getPath()); String last = path.getFileName().toString(); String secondToLast = path.getName(path.getNameCount() - 2).toString(); 

Para obtener el último segmento en una línea de código, simplemente anide las líneas de arriba.

Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()

Para obtener el penúltimo segmento al tiempo que se evitan los números índices y la posibilidad de errores uno a uno, use el método getParent() .

String secondToLast = path.getParent().getFileName().toString();

Tenga en cuenta que el método getParent() puede getParent() repetidamente para recuperar segmentos en orden inverso. En este ejemplo, la ruta solo contiene dos segmentos; de lo contrario, llamar a getParent().getParent() recuperaría el penúltimo segmento.

Si está utilizando Java 8 y quiere el último segmento en una ruta de archivo, puede hacerlo.

 Path path = Paths.get("example/path/to/file"); String lastSegment = path.getFileName().toString(); 

Si tiene una url como http://base_path/some_segment/id , puede hacerlo.

 final Path urlPath = Paths.get("http://base_path/some_segment/id"); final Path lastSegment = urlPath.getName(urlPath.getNameCount() - 1); 

Puede usar la función getPathSegments() . ( Documentación de Android )

Considere su URI de ejemplo:

 String uri = "http://base_path/some_segment/id" 

Puedes obtener el último segmento usando:

 List pathSegments = uri.getPathSegments(); String lastSegment = pathSegments.get(pathSegments.size - 1); 

lastSegment será id .

En Android

Android tiene una clase incorporada para administrar URI.

 Uri uri = Uri.parse("http://base_path/some_segment/id"); String lastPathSegment = uri.getLastPathSegment() 

Si tiene commons-io incluido en su proyecto, puede hacerlo sin crear objetos innecesarios con org.apache.commons.io.FilenameUtils

 String uri = "http://base_path/some_segment/id"; String fileName = FilenameUtils.getName(uri); System.out.println(fileName); 

Te dará la última parte de la ruta, que es la id

Obtenga la URL del URI y use getFile () si no está listo para usar la forma de subcadena para extraer el archivo.