Comment obtenir le dernier segment de chemin d’un uri

J’ai en entrée une chaîne qui est un URI . Comment est-il possible d’obtenir le dernier segment de chemin? que dans mon cas est un identifiant?

Ceci est mon URL d’entrée

 Ssortingng uri = "http://base_path/some_segment/id" 

Et je dois obtenir l’id que j’ai essayé avec cela

 Ssortingng 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 y a une meilleure façon de le faire.

est ce que vous recherchez:

 URI uri = new URI("http://example.com/foo/bar/42?param=true"); Ssortingng path = uri.getPath(); Ssortingng idStr = path.subssortingng(path.lastIndexOf('/') + 1); int id = Integer.parseInt(idStr); 

alternativement

 URI uri = new URI("http://example.com/foo/bar/42?param=true"); Ssortingng[] segments = uri.getPath().split("/"); Ssortingng idStr = segments[segments.length-1]; int id = Integer.parseInt(idStr); 
 import android.net.Uri; Uri uri = Uri.parse("http://example.com/foo/bar/42?param=true"); Ssortingng token = uri.getLastPathSegment(); 

Voici une méthode rapide pour le faire:

 public static Ssortingng getLastBitFromUrl(final Ssortingng url){ // return url.replaceFirst("[^?]*/(.*?)(?:\\?.*)","$1);" <-- incorrect return url.replaceFirst(".*/([^/?]+).*", "$1"); } 

Code d'essai:

 public static void main(final Ssortingng[] args){ System.out.println(getLastBitFromUrl( "http://example.com/foo/bar/42?param=true")); System.out.println(getLastBitFromUrl("http://example.com/foo")); System.out.println(getLastBitFromUrl("http://example.com/bar/")); } 

Sortie:

42
foo
bar

Explication:

 .*/ // find anything up to the last / character ([^/?]+) // find (and capture) all following characters up to the next / or ? // the + makes sure that at least 1 character is matched .* // find all following characters $1 // this variable references the saved second group from above // Ie the entire ssortingng is replaces with just the portion // captured by the parentheses above 

Je sais que c’est vieux, mais les solutions ici semblent plutôt verbeuses. Juste un simple traceur lisible si vous avez une URL ou un URI :

 Ssortingng filename = new File(url.getPath()).getName(); 

Ou si vous avez une Ssortingng :

 Ssortingng filename = new File(new URL(url).getPath()).getName(); 

Dans Java 7+, vous pouvez combiner quelques-unes des réponses précédentes pour permettre la récupération de tout segment de chemin depuis un URI, et non uniquement le dernier segment. Nous pouvons convertir l’URI en object java.nio.file.Path pour tirer parti de sa getName(int) .

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.

 URI uri = URI.create("http://base_path/some_segment/id"); Path path = Paths.get(uri.getPath()); Ssortingng last = path.getFileName().toSsortingng(); Ssortingng secondToLast = path.getName(path.getNameCount() - 2).toSsortingng(); 

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().toSsortingng()

Pour obtenir le dernier segment en évitant les numéros d’index et les erreurs potentielles, utilisez la méthode getParent() .

Ssortingng secondToLast = path.getParent().getFileName().toSsortingng();

Notez que la méthode getParent() peut être appelée à plusieurs resockets pour récupérer des segments dans l’ordre inverse. Dans cet exemple, le chemin d’access ne contient que deux segments, sinon l’appel de getParent().getParent() récupérerait le troisième segment.

Si vous utilisez Java 8 et que vous voulez le dernier segment dans un chemin de fichier, vous pouvez le faire.

 Path path = Paths.get("example/path/to/file"); Ssortingng lastSegment = path.getFileName().toSsortingng(); 

Si vous avez une URL telle que http://base_path/some_segment/id vous pouvez le faire.

 final Path urlPath = Paths.get("http://base_path/some_segment/id"); final Path lastSegment = urlPath.getName(urlPath.getNameCount() - 1); 

Vous pouvez utiliser la fonction getPathSegments() . ( Documentation Android )

Considérez votre exemple d’URI:

 Ssortingng uri = "http://base_path/some_segment/id" 

Vous pouvez obtenir le dernier segment en utilisant:

 List pathSegments = uri.getPathSegments(); Ssortingng lastSegment = pathSegments.get(pathSegments.size - 1); 

lastSegment sera id

Dans Android

Android a une classe intégrée pour gérer les URI.

 Uri uri = Uri.parse("http://base_path/some_segment/id"); Ssortingng lastPathSegment = uri.getLastPathSegment() 

Si vous avez des commons-io inclus dans votre projet, vous pouvez le faire sans créer d’objects inutiles avec org.apache.commons.io.FilenameUtils

 Ssortingng uri = "http://base_path/some_segment/id"; Ssortingng fileName = FilenameUtils.getName(uri); System.out.println(fileName); 

Vous donner la dernière partie du chemin, qui est l’ id

Obtenez l’URL de l’URI et utilisez getFile () si vous n’êtes pas prêt à utiliser la méthode de la sous-chaîne pour extraire le fichier.