Как получить последний сегмент пути uri



у меня есть на входе строка, которая является URI. как можно получить последний отрезок пути?
что в моем случае это ID?



- Это мой входной URL-адрес



String uri = "http://base_path/some_segment/id"


и я должен получить идентификатор, который я пробовал с этим



String strId = "http://base_path/some_segment/id";
strId=strId.replace(path);
strId=strId.replaceAll("/", "");
Integer id = new Integer(strId);
return id.intValue();


но это не работает, и наверняка есть лучший способ сделать это.

532   10  

10 ответов:

это то, что вы ищете:

URI uri = new URI("http://example.com/foo/bar/42?param=true");
String path = uri.getPath();
String idStr = path.substring(path.lastIndexOf('/') + 1);
int id = Integer.parseInt(idStr);

как вариант

URI uri = new URI("http://example.com/foo/bar/42?param=true");
String[] segments = uri.getPath().split("/");
String idStr = segments[segments.length-1];
int id = Integer.parseInt(idStr);
import android.net.Uri;
Uri uri = Uri.parse("http://example.com/foo/bar/42?param=true");
String token = uri.getLastPathSegment();

вот короткий метод, чтобы сделать это:

public static String getLastBitFromUrl(final String url){
    // return url.replaceFirst("[^?]*/(.*?)(?:\?.*)",");" <-- incorrect
    return url.replaceFirst(".*/([^/?]+).*", "");
}

Тестовый Код:

public static void main(final String[] args){
    System.out.println(getLastBitFromUrl(
        "http://example.com/foo/bar/42?param=true"));
    System.out.println(getLastBitFromUrl("http://example.com/foo"));
    System.out.println(getLastBitFromUrl("http://example.com/bar/"));
}

выход:

42
фу
бар

объяснение:

.*/      // find anything up to the last / character
([^/?]+) // find (and capture) all following characters up to the next / or ?
         // the + makes sure that at least 1 character is matched
.*       // find all following characters


       // this variable references the saved second group from above
         // I.e. the entire string is replaces with just the portion
         // captured by the parentheses above

Я знаю, что это старый, но решения здесь, кажется, довольно подробно. Просто легко читаемый однострочный, если у вас есть URL или URI:

String filename = new File(url.getPath()).getName();

или String:

String filename = new File(new URL(url).getPath()).getName();

в Java 7+ некоторые из предыдущих ответов могут быть объединены, чтобы разрешить извлечение любой сегмент пути из URI, а не только последний сегмент. Мы можем преобразовать URI в java.nio.file.Path

Если вы используете Java 8, и вы хотите, чтобы последний сегмент в пути к файлу вы можете сделать.

Path path = Paths.get("example/path/to/file");
String lastSegment = path.getFileName().toString();

Если у вас есть url, например http://base_path/some_segment/id вы можете сделать.

final Path urlPath = Paths.get("http://base_path/some_segment/id");
final Path lastSegment = urlPath.getName(urlPath.getNameCount() - 1);

можно использовать

Для Android

Android имеет встроенный класс для управления URI.

Uri uri = Uri.parse("http://base_path/some_segment/id");
String lastPathSegment = uri.getLastPathSegment()

если у вас commons-io включены в ваш проект, вы можете сделать это без создания ненужных объектов с org.apache.commons.io.FilenameUtils

String uri = "http://base_path/some_segment/id";
String fileName = FilenameUtils.getName(uri);
System.out.println(fileName);

даст вам последнюю часть пути, которая является id

получить URL из URI и использовать getFile (), если вы не готовы использовать подстроку способ извлечения файла.

Comments

    Ничего не найдено.