En Java 7+, algunas de las respuestas anteriores se pueden combinar para permitir la recuperación de cualquier segmento de ruta de un URI, en lugar de solo el último segmento. Podemos convertir el URI en un java.nio.file.Pathobjeto, para aprovechar sugetName(int) método.
Desafortunadamente, la fábrica estática Paths.get(uri)no está construida 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 evitando los números de índice y la posibilidad de errores uno por uno, utilice el getParent()método.
String secondToLast = path.getParent().getFileName().toString();
Tenga en cuenta que el getParent()método se puede llamar repetidamente para recuperar segmentos en orden inverso. En este ejemplo, la ruta solo contiene dos segmentos; de lo contrario, la llamada getParent().getParent()recuperaría el antepenúltimo segmento.