Comment faire pour obtenir le dernier segment de chemin d'uri
J'ai en entrée une chaîne de caractères qui est un URI
. comment est-ce possible d'obtenir le dernier segment de chemin?
que dans mon cas, c'est une id?
C'est mon url d'entrée
String uri = "http://base_path/some_segment/id"
Et je dois obtenir l'id que j'ai essayé avec ce
String strId = "http://base_path/some_segment/id";
strId=strId.replace(path);
strId=strId.replaceAll("/", "");
Integer id = new Integer(strId);
return id.intValue();
mais il ne fonctionne pas et pour sûr, il y a une meilleure façon de le faire.
Vous devez vous connecter pour publier un commentaire.
est que ce que vous cherchez:
sinon
String idStr = new File(uri.getPath()).getName()
, même que cette réponse mais utiliseFile
au lieu deString
de diviser le chemin.while (path.endsWith("/")) path = path.substring(0, path.length() - 1);
Uri
nom de la classe est en minuscules et ne peut pas être instanciée. J'ai corrigé votre réponse à l'utilisation de la statique méthode de fabriqueUri.parse()
.Voici une petite méthode pour le faire:
Code De Test:
De sortie:
Explication:
/
dans le nié le caractère de classe[^/?]
est inutile, car il ne sera jamais égalé..*/
toujours correspondre à la dernière/
dans la Chaîne, donc pas d'autres/
doivent être rencontrées.http://example.com/foo#reply2
, Il sera grand si vous pourriez mettre à jour votre réponse à résoudre. MerciJe sais que c'est vieux, mais les solutions semblent assez bavard. Juste une forme aisément lisible one-liner si vous avez un
URL
ouURI
:Ou si vous avez un
String
:a.co/last?a=1#frag
. Je ne pense pas, comme le code ne sous-chaîne de la dernière voie symbole jusqu'à la fin:path.substring(index + 1)
.Si vous utilisez Java 8 et vous souhaitez le dernier segment d'un chemin d'accès au fichier que vous pouvez faire.
Si vous avez une url telle que
http://base_path/some_segment/id
que vous pouvez faire.Dans Java 7+ un peu les réponses précédentes peuvent être combinées afin de permettre la récupération de tout segment de trajectoire à partir d'un URI, plutôt que de simplement le dernier segment. Nous pouvons convertir un URI
java.nio.fichier.Path
objet, de profiter de sesgetName(int)
méthode.Malheureusement, la statique de l'usine
Paths.get(uri)
n'est pas construit pour gérer le protocole http, nous avons d'abord besoin de séparer le système à partir de l'URI du chemin.Pour obtenir le dernier segment d'une ligne de code, il suffit de nest 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 de tout-en-un d'erreurs, d'utiliser le
getParent()
méthode.String secondToLast = path.getParent().getFileName().toString();
Note le
getParent()
méthode peut être appelée à plusieurs reprises pour récupérer les segments dans l'ordre inverse. Dans cet exemple, le chemin ne contient que deux segments, autrement appelgetParent().getParent()
permettrait de récupérer le troisième-à-dernier segment.Dans Android
Android a un construit en classe pour la gestion des Uri.
Vous pouvez utiliser
getPathSegments()
fonction. (Android Documentation)Tenir compte de votre exemple d'URI:
Vous pouvez obtenir le dernier segment à l'aide d':
lastSegment
seraid
.Si vous avez
commons-io
inclus dans votre projet, vous pouvez le faire sans la création d'objets inutiles avecorg.apache.commons.io.FilenameUtils
Vous donnera la dernière partie du chemin, qui est le
id
Je suis en utilisant le code suivant dans une classe utilitaire:
Obtenir l'URL d'URI et de l'utilisation getFile() si vous n'êtes pas prêt à utiliser substring manière d'extraire le fichier.
getPath()
pasgetFile()
.