Eu tenho como entrada uma string que é um URI
. como é possível obter o último segmento de caminho (que no meu caso é um id)?
Este é o meu URL de entrada:
String uri = "http://base_path/some_segment/id"
e eu tenho que obter o id que tentei com isso:
String strId = "http://base_path/some_segment/id";
strId = strId.replace(path);
strId = strId.replaceAll("/", "");
Integer id = new Integer(strId);
return id.intValue();
mas não funciona, e certamente deve haver uma maneira melhor de fazer isso.
String idStr = new File(uri.getPath()).getName()
mesmo que esta resposta, mas usa emFile
vez deString
para dividir o caminho.while (path.endsWith("/")) path = path.substring(0, path.length() - 1);
fonte
Uri
nome da classe Android está em minúsculas e não pode ser instanciado. Corrigi sua resposta para usar o método de fábrica estáticoUri.parse()
.Aqui está um método curto para fazer isso:
Código de teste:
Resultado:
Explicação:
fonte
/
na classe de caractere negado[^/?]
é desnecessário, porque nunca será correspondido..*/
sempre corresponderá ao último/
na String, portanto, nenhum outro/
deve ser encontrado.http://example.com/foo#reply2
, seria ótimo se você pudesse atualizar sua resposta para resolvê-lo. ObrigadoEu sei que isso é antigo, mas as soluções aqui parecem bastante prolixas. Apenas uma linha de fácil leitura se você tiver um
URL
ouURI
:Ou se você tiver um
String
:fonte
a.co/last?a=1#frag
. Acho que não, que o código não substring do último símbolo caminho até o fim:path.substring(index + 1)
.Se você estiver usando Java 8 e quiser o último segmento em um caminho de arquivo, pode fazer.
Se você tiver um url como
http://base_path/some_segment/id
você pode fazer.fonte
No Android
O Android tem uma classe integrada para gerenciar URIs.
fonte
Em Java 7 ou superior, algumas das respostas anteriores podem ser combinadas para permitir a recuperação de qualquer segmento de caminho de um URI, em vez de apenas o último segmento. Podemos converter o URI em um
java.nio.file.Path
objeto, para tirar proveito de suagetName(int)
método.Infelizmente, a fábrica estática
Paths.get(uri)
não foi construída para lidar com o esquema http, portanto, primeiro precisamos separar o esquema do caminho do URI.Para obter o último segmento em uma linha de código, simplesmente aninhe as linhas acima.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Para obter o penúltimo segmento e, ao mesmo tempo, evitar números de índice e o potencial de erros defasados, use o
getParent()
método.String secondToLast = path.getParent().getFileName().toString();
Observe que o
getParent()
método pode ser chamado repetidamente para recuperar segmentos na ordem inversa. Neste exemplo, o caminho contém apenas dois segmentos, caso contrário, a chamadagetParent().getParent()
recuperaria o terceiro ao último segmento.fonte
Se você
commons-io
incluiu em seu projeto, você pode fazê-lo sem criar objetos desnecessários comorg.apache.commons.io.FilenameUtils
Irá lhe dar a última parte do caminho, que é o
id
fonte
Você pode usar a
getPathSegments()
função. ( Documentação Android )Considere seu URI de exemplo:
Você pode obter o último segmento usando:
lastSegment
seráid
.fonte
Você também pode usar replaceAll:
resultado:
fonte
Estou usando o seguinte em uma classe de utilitário:
fonte
Obtenha a URL do URI e use getFile () se você não estiver pronto para usar a forma de substring de extrair o arquivo.
fonte
getPath()
Não usegetFile()
.