Java 7以降では、前の回答のいくつかを組み合わせて、最後のセグメントだけでなく、URIから任意のパスセグメントを取得できます。java.nio.file.Path
そのgetName(int)
メソッドを利用するために、URIをオブジェクトに変換できます。
残念ながら、静的ファクトリ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();
コードの1行の最後のセグメントを取得するには、単に上記の行をネストします。
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
最後から2番目のセグメントを取得し、インデックス番号と1つずれるエラーの可能性を回避するには、getParent()
メソッドを使用します。
String secondToLast = path.getParent().getFileName().toString();
このgetParent()
メソッドを繰り返し呼び出して、逆の順序でセグメントを取得できることに注意してください。この例では、パスには2つのセグメントのみが含まれています。それ以外の場合、呼び出しgetParent().getParent()
は最後から3番目のセグメントを取得します。