Ich habe als Eingabe eine Zeichenfolge, die a ist URI
. Wie ist es möglich, das letzte Pfadsegment zu erhalten (das in meinem Fall eine ID ist)?
Dies ist meine Eingabe-URL:
String uri = "http://base_path/some_segment/id"
und ich muss die ID erhalten, die ich damit versucht habe:
String strId = "http://base_path/some_segment/id";
strId = strId.replace(path);
strId = strId.replaceAll("/", "");
Integer id = new Integer(strId);
return id.intValue();
aber es funktioniert nicht und es muss sicherlich einen besseren Weg geben, es zu tun.
String idStr = new File(uri.getPath()).getName()
dies einfach wie in dieser Antwort, verwenden Sie jedochFile
stattString
, um den Pfad zu teilen.while (path.endsWith("/")) path = path.substring(0, path.length() - 1);
quelle
Uri
Name der Android- Klasse klein geschrieben und kann nicht instanziiert werden. Ich habe Ihre Antwort korrigiert, um die statische Factory-Methode zu verwendenUri.parse()
.Hier ist eine kurze Methode, um dies zu tun:
Testcode:
Ausgabe:
Erläuterung:
quelle
/
in der negierten Zeichenklasse[^/?]
ist nicht erforderlich, da sie niemals übereinstimmt..*/
wird immer mit dem letzten/
in der Zeichenfolge übereinstimmen , daher sollte keine andere/
angetroffen werden.http://example.com/foo#reply2
. Es wäre großartig, wenn Sie Ihre Antwort aktualisieren könnten, um sie zu lösen. DankeIch weiß, dass dies alt ist, aber die Lösungen hier scheinen ziemlich ausführlich zu sein. Nur ein leicht lesbarer Einzeiler, wenn Sie einen
URL
oder habenURI
:Oder wenn Sie eine haben
String
:quelle
a.co/last?a=1#frag
. Ich denke nicht, da der Code die Teilzeichenfolge des letzten Pfadsymbols bis zum Ende ausführt :path.substring(index + 1)
.Wenn Sie Java 8 verwenden und das letzte Segment in einem Dateipfad möchten, können Sie dies tun.
Wenn Sie eine URL haben, wie
http://base_path/some_segment/id
Sie es tun können.quelle
In Android
Android verfügt über eine integrierte Klasse zum Verwalten von URIs.
quelle
In Java 7+ können einige der vorherigen Antworten kombiniert werden, um das Abrufen eines beliebigen Pfadsegments aus einem URI und nicht nur des letzten Segments zu ermöglichen. Wir können den URI in ein
java.nio.file.Path
Objekt konvertieren , um seinegetName(int)
Methode zu nutzen.Leider ist die statische Factory
Paths.get(uri)
nicht für das http-Schema ausgelegt, daher müssen wir zuerst das Schema vom Pfad der URI trennen.Um das letzte Segment in einer Codezeile zu erhalten, verschachteln Sie einfach die obigen Zeilen.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Verwenden Sie die
getParent()
Methode , um das vorletzte Segment zu erhalten und dabei Indexnummern und mögliche Fehler zu vermeiden .String secondToLast = path.getParent().getFileName().toString();
Beachten Sie, dass die
getParent()
Methode wiederholt aufgerufen werden kann, um Segmente in umgekehrter Reihenfolge abzurufen. In diesem Beispiel enthält der Pfad nur zwei Segmente, andernfallsgetParent().getParent()
würde der Aufruf das vorletzte Segment abrufen.quelle
Wenn Sie
commons-io
in Ihr Projekt aufgenommen haben, können Sie dies tun, ohne unnötige Objekte mit zu erstellenorg.apache.commons.io.FilenameUtils
Wird Ihnen den letzten Teil des Pfades geben, nämlich den
id
quelle
Sie können die
getPathSegments()
Funktion verwenden. ( Android-Dokumentation )Betrachten Sie Ihre Beispiel-URI:
Sie können das letzte Segment erhalten mit:
lastSegment
wird seinid
.quelle
Sie können auch replaceAll verwenden:
Ergebnis:
quelle
Ich verwende Folgendes in einer Utility-Klasse:
quelle
Rufen Sie die URL vom URI ab und verwenden Sie getFile (), wenn Sie nicht bereit sind, die Teilzeichenfolge zum Extrahieren von Dateien zu verwenden.
quelle
getPath()
nichtgetFile()
.