В Java 7+ можно объединить несколько предыдущих ответов, чтобы можно было получить любой сегмент пути из URI, а не только последний сегмент.Мы можем преобразовать URI в объект java.nio.file.Path
, чтобы воспользоваться его методом getName(int)
.
К сожалению, статическая фабрика Paths.get(uri)
непостроен для обработки схемы http, поэтому сначала нам нужно отделить схему от пути 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();
Чтобы получить последний сегмент в одной строке кода, просто вложите строки выше.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Чтобы получить второй к последнему сегменту, избегая при этом порядковых номеров и вероятности появления ошибок «один на один», используйте метод getParent()
.
String secondToLast = path.getParent().getFileName().toString();
Обратите внимание, что метод getParent()
можно вызывать повторно для извлечения сегментов в обратном порядке.В этом примере путь содержит только два сегмента, в противном случае вызов getParent().getParent()
приведет к извлечению третьего до последнего сегмента.