У 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()
отримає сегмент третій-останній.