Tengo como entrada una cadena que es un URI
. ¿Cómo es posible obtener el último segmento de ruta (que en mi caso es una identificación)?
Esta es mi URL de entrada:
String uri = "http://base_path/some_segment/id"
y tengo que obtener la identificación que he probado con esto:
String strId = "http://base_path/some_segment/id";
strId = strId.replace(path);
strId = strId.replaceAll("/", "");
Integer id = new Integer(strId);
return id.intValue();
pero no funciona, y seguramente debe haber una mejor manera de hacerlo.
String idStr = new File(uri.getPath()).getName()
mismo que esta respuesta, pero usa enFile
lugar deString
dividir la ruta.while (path.endsWith("/")) path = path.substring(0, path.length() - 1);
fuente
Uri
nombre de la clase de Android está en minúsculas y no se puede crear una instancia. He corregido su respuesta para utilizar el método de fábrica estáticaUri.parse()
.Aquí hay un método breve para hacerlo:
Código de prueba:
Salida:
Explicación:
fuente
/
en la clase de carácter negado[^/?]
es innecesario, porque nunca coincidirá..*/
siempre coincidirá con el último/
de la cadena, por lo que no se/
debe encontrar ningún otro .http://example.com/foo#reply2
. Sería genial si pudieras actualizar tu respuesta para resolverlo. GraciasSé que esto es antiguo, pero las soluciones aquí parecen bastante detalladas. Solo un resumen de fácil lectura si tiene
URL
oURI
:O si tiene un
String
:fuente
a.co/last?a=1#frag
. Creo que no, ya que el código no subcadena del último símbolo camino hasta el final:path.substring(index + 1)
.Si está utilizando Java 8 y desea el último segmento en una ruta de archivo, puede hacerlo.
Si tiene una URL como
http://base_path/some_segment/id
puede hacer.fuente
En Android
Android tiene una clase integrada para administrar URI.
fuente
En Java 7+, algunas de las respuestas anteriores se pueden combinar para permitir la recuperación de cualquier segmento de ruta de un URI, en lugar de solo el último segmento. Podemos convertir el URI en un
java.nio.file.Path
objeto, para aprovechar sugetName(int)
método.Desafortunadamente, la fábrica estática
Paths.get(uri)
no está construida para manejar el esquema http, por lo que primero debemos separar el esquema de la ruta del URI.Para obtener el último segmento en una línea de código, simplemente anide las líneas de arriba.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Para obtener el penúltimo segmento evitando los números de índice y la posibilidad de errores uno por uno, utilice el
getParent()
método.String secondToLast = path.getParent().getFileName().toString();
Tenga en cuenta que el
getParent()
método se puede llamar repetidamente para recuperar segmentos en orden inverso. En este ejemplo, la ruta solo contiene dos segmentos; de lo contrario, la llamadagetParent().getParent()
recuperaría el antepenúltimo segmento.fuente
Si lo ha
commons-io
incluido en su proyecto, puede hacerlo sin crear objetos innecesarios conorg.apache.commons.io.FilenameUtils
Te dará la última parte del camino, que es el
id
fuente
Puede utilizar la
getPathSegments()
función. ( Documentación de Android )Considere su URI de ejemplo:
Puede obtener el último segmento usando:
lastSegment
seráid
.fuente
También puede usar replaceAll:
resultado:
fuente
Estoy usando lo siguiente en una clase de utilidad:
fuente
Obtenga la URL de URI y use getFile () si no está listo para usar la forma de subcadena de extraer el archivo.
fuente
getPath()
No usegetFile()
.