ใน 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()
หากต้องการรับส่วนที่สองถึงสุดท้ายในขณะที่หลีกเลี่ยงตัวเลขดัชนีและโอกาสที่จะเกิดข้อผิดพลาดแบบ off-by-one ให้ใช้getParent()
วิธีนี้
String secondToLast = path.getParent().getFileName().toString();
โปรดสังเกตว่าgetParent()
เมธอดสามารถถูกเรียกซ้ำ ๆ เพื่อดึงเซ็กเมนต์ในลำดับย้อนกลับ ในตัวอย่างนี้พา ธ มีเพียงสองเซ็กเมนต์เท่านั้นมิฉะนั้นการโทรgetParent().getParent()
จะดึงเซ็กเมนต์ที่สามถึงสุดท้าย