Em Java 7 ou superior, algumas das respostas anteriores podem ser combinadas para permitir a recuperação de qualquer segmento de caminho de um URI, em vez de apenas o último segmento. Podemos converter o URI em um java.nio.file.Path
objeto, para tirar proveito de suagetName(int)
método.
Infelizmente, a fábrica estática Paths.get(uri)
não foi construída para lidar com o esquema http, portanto, primeiro precisamos separar o esquema do caminho do 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 obter o último segmento em uma linha de código, simplesmente aninhe as linhas acima.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Para obter o penúltimo segmento e, ao mesmo tempo, evitar números de índice e o potencial de erros defasados, use o getParent()
método.
String secondToLast = path.getParent().getFileName().toString();
Observe que o getParent()
método pode ser chamado repetidamente para recuperar segmentos na ordem inversa. Neste exemplo, o caminho contém apenas dois segmentos, caso contrário, a chamada getParent().getParent()
recuperaria o terceiro ao último segmento.