В 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()
будет извлечен предпоследний сегмент.