Trong Java 7+, một số câu trả lời trước đó có thể được kết hợp để cho phép truy xuất bất kỳ đoạn đường dẫn nào từ URI, thay vì chỉ đoạn cuối cùng. Chúng ta có thể chuyển đổi URI thành một java.nio.file.Path
đối tượng, để tận dụng getName(int)
phương thức của nó .
Thật không may, nhà máy tĩnh Paths.get(uri)
không được xây dựng để xử lý lược đồ http, vì vậy trước tiên chúng ta cần tách lược đồ khỏi đường dẫn của 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();
Để lấy phân đoạn cuối cùng trong một dòng mã, chỉ cần lồng các dòng ở trên.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Để có được phân đoạn từ thứ hai đến cuối cùng trong khi tránh các số chỉ mục và khả năng xảy ra lỗi riêng lẻ, hãy sử dụng getParent()
phương pháp này.
String secondToLast = path.getParent().getFileName().toString();
Lưu ý rằng getParent()
phương thức có thể được gọi nhiều lần để truy xuất các phân đoạn theo thứ tự ngược lại. Trong ví dụ này, đường dẫn chỉ chứa hai phân đoạn, nếu không việc gọi getParent().getParent()
sẽ truy xuất phân đoạn từ thứ ba đến cuối cùng.