Как получить последний сегмент пути 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();
но это не работает, и наверняка есть лучший способ сделать это.
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.FilenameUtilsString uri = "http://base_path/some_segment/id"; String fileName = FilenameUtils.getName(uri); System.out.println(fileName);даст вам последнюю часть пути, которая является
id
получить URL из URI и использовать getFile (), если вы не готовы использовать подстроку способ извлечения файла.
Comments