У меня на входе строка с расширением URI
. как можно получить последний сегмент пути (в моем случае это идентификатор)?
Это мой входной 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();
но это не работает, и, безусловно, должен быть лучший способ сделать это.
String idStr = new File(uri.getPath()).getName()
же, что и этот ответ, ноFile
вместоString
разделения пути.while (path.endsWith("/")) path = path.substring(0, path.length() - 1);
источник
Uri
имя класса Android записано в нижнем регистре и не может быть создано. Я исправил ваш ответ, чтобы использовать метод статической фабрикиUri.parse()
.Вот краткий способ сделать это:
Код теста:
Вывод:
Объяснение:
источник
/
инвертированном классе символов нет[^/?]
необходимости, потому что он никогда не будет сопоставлен..*/
всегда будет соответствовать последнему/
в строке, поэтому никаких других/
встречаться не должно.http://example.com/foo#reply2
Было бы здорово, если бы вы могли обновить свой ответ, чтобы решить эту проблему. СпасибоЯ знаю, что это устарело, но решения здесь кажутся довольно многословными. Просто легко читаемый однострочник, если у вас есть
URL
илиURI
:Или если у вас есть
String
:источник
a.co/last?a=1#frag
. Я думаю , что нет, так как код не делает подстроки последнего символа пути до конца:path.substring(index + 1)
.Если вы используете Java 8 и вам нужен последний сегмент в пути к файлу, вы можете это сделать.
Если у вас есть URL-адрес,
http://base_path/some_segment/id
то можно сделать.источник
В Android
В Android есть встроенный класс для управления URI.
источник
В Java 7+ несколько предыдущих ответов можно объединить, чтобы разрешить получение любого сегмента пути из URI, а не только последнего сегмента. Мы можем преобразовать URI в
java.nio.file.Path
объект, чтобы воспользоваться егоgetName(int)
методом.К сожалению, статическая фабрика
Paths.get(uri)
не построена для обработки схемы http, поэтому нам сначала нужно отделить схему от пути URI.Чтобы получить последний сегмент в одной строке кода, просто вложите строки выше.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Чтобы получить предпоследний сегмент, избегая при этом номеров индексов и потенциальных ошибок, не связанных друг с другом, используйте этот
getParent()
метод.String secondToLast = path.getParent().getFileName().toString();
Обратите внимание, что
getParent()
метод можно вызывать повторно для получения сегментов в обратном порядке. В этом примере путь содержит только два сегмента, иначе при вызовеgetParent().getParent()
будет извлечен предпоследний сегмент.источник
Если вы
commons-io
включили в свой проект, вы можете сделать это без создания ненужных объектов с помощьюorg.apache.commons.io.FilenameUtils
Дам вам последнюю часть пути, то есть
id
источник
Вы можете использовать
getPathSegments()
функцию. ( Документация для Android )Рассмотрим свой пример URI:
Вы можете получить последний сегмент, используя:
lastSegment
будетid
.источник
Вы также можете использовать replaceAll:
результат:
источник
В служебном классе я использую следующее:
источник
Получите URL-адрес из URI и используйте getFile (), если вы не готовы использовать подстроку для извлечения файла.
источник
getPath()
неgetFile()
.