J'ai en entrée une chaîne qui est un URI
. comment est-il possible d'obtenir le dernier segment de chemin (qui dans mon cas est un identifiant)?
Ceci est mon URL d'entrée:
String uri = "http://base_path/some_segment/id"
et je dois obtenir l'identifiant que j'ai essayé avec ceci:
String strId = "http://base_path/some_segment/id";
strId = strId.replace(path);
strId = strId.replaceAll("/", "");
Integer id = new Integer(strId);
return id.intValue();
mais cela ne fonctionne pas, et il doit sûrement y avoir une meilleure façon de le faire.
String idStr = new File(uri.getPath()).getName()
, comme cette réponse, mais utilisezFile
au lieu deString
pour diviser le chemin.while (path.endsWith("/")) path = path.substring(0, path.length() - 1);
la source
Uri
nom de la classe Android est en minuscules et ne peut pas être instancié. J'ai corrigé votre réponse pour utiliser la méthode de l'usine statiqueUri.parse()
.Voici une courte méthode pour le faire:
Code de test:
Production:
Explication:
la source
/
dans la classe de caractères annulée[^/?]
est inutile, car il ne sera jamais mis en correspondance..*/
correspondra toujours au dernier/
de la chaîne, donc aucun autre/
ne doit être rencontré.http://example.com/foo#reply2
, ce serait formidable si vous pouviez mettre à jour votre réponse pour le résoudre. MerciJe sais que c'est vieux, mais les solutions ici semblent plutôt verbeuses. Juste un one-liner facilement lisible si vous avez un
URL
ouURI
:Ou si vous avez un
String
:la source
a.co/last?a=1#frag
. Je ne pense pas, comme le code de sous - chaînes du dernier symbole du chemin jusqu'à la fin:path.substring(index + 1)
.Si vous utilisez Java 8 et que vous voulez le dernier segment d'un chemin de fichier, vous pouvez le faire.
Si vous avez une URL comme
http://base_path/some_segment/id
vous pouvez le faire.la source
Sous Android
Android a une classe intégrée pour la gestion des URI.
la source
Dans Java 7+, quelques-unes des réponses précédentes peuvent être combinées pour permettre la récupération de n'importe quel segment de chemin à partir d'un URI, plutôt que juste le dernier segment. Nous pouvons convertir l'URI en
java.nio.file.Path
objet, pour profiter de sagetName(int)
méthode.Malheureusement, la fabrique statique
Paths.get(uri)
n'est pas conçue pour gérer le schéma http, nous devons donc d'abord séparer le schéma du chemin de l'URI.Pour obtenir le dernier segment dans une ligne de code, imbriquez simplement les lignes ci-dessus.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Pour obtenir l'avant-dernier segment tout en évitant les numéros d'index et le potentiel d'erreurs off-by-one, utilisez la
getParent()
méthode.String secondToLast = path.getParent().getFileName().toString();
Notez que la
getParent()
méthode peut être appelée à plusieurs reprises pour récupérer des segments dans l'ordre inverse. Dans cet exemple, le chemin ne contient que deux segments, sinon l'appelgetParent().getParent()
récupérerait le troisième au dernier segment.la source
Si vous avez
commons-io
inclus dans votre projet, vous pouvez le faire sans créer d'objets inutiles avecorg.apache.commons.io.FilenameUtils
Vous donnera la dernière partie du chemin, qui est le
id
la source
Vous pouvez utiliser la
getPathSegments()
fonction. ( Documentation Android )Considérez votre exemple d'URI:
Vous pouvez obtenir le dernier segment en utilisant:
lastSegment
seraid
.la source
Vous pouvez également utiliser replaceAll:
résultat:
la source
J'utilise ce qui suit dans une classe utilitaire:
la source
Obtenez l'URL à partir de l'URI et utilisez getFile () si vous n'êtes pas prêt à utiliser la méthode de sous-chaîne pour extraire le fichier.
la source
getPath()
pasgetFile()
.