Mam jako dane wejściowe ciąg, który jest URI
. jak można uzyskać ostatni segment ścieżki (w moim przypadku jest to identyfikator)?
To jest mój wejściowy adres URL:
String uri = "http://base_path/some_segment/id"
i muszę uzyskać identyfikator, który próbowałem z tym:
String strId = "http://base_path/some_segment/id";
strId = strId.replace(path);
strId = strId.replaceAll("/", "");
Integer id = new Integer(strId);
return id.intValue();
ale to nie działa i na pewno musi istnieć lepszy sposób, aby to zrobić.
String idStr = new File(uri.getPath()).getName()
samo, co ta odpowiedź, ale używaFile
zamiastString
do podzielenia ścieżki.while (path.endsWith("/")) path = path.substring(0, path.length() - 1);
źródło
Uri
nazwa klasy systemu Android jest zapisana małymi literami i nie można jej utworzyć. Poprawiłem twoją odpowiedź, aby użyć statycznej metody fabrykiUri.parse()
.Oto krótka metoda:
Kod testu:
Wynik:
Wyjaśnienie:
źródło
/
W zanegowanej klasy postaci[^/?]
nie jest konieczne, ponieważ nigdy nie zostaną dopasowane..*/
zawsze będzie pasować do ostatniej/
w ciągu, więc nie/
należy napotkać żadnego innego .http://example.com/foo#reply2
Byłoby wspaniale, gdybyś mógł zaktualizować swoją odpowiedź, aby go rozwiązać. DziękiWiem, że to stare, ale tutaj rozwiązania wydają się dość rozwlekłe. Po prostu łatwo czytelny, jednoliniowy, jeśli masz
URL
lubURI
:Lub jeśli masz
String
:źródło
a.co/last?a=1#frag
. Nie sądzę, ponieważ kod ma podciąg ostatniego symbolu ścieżki aż do końca:path.substring(index + 1)
.Jeśli używasz języka Java 8 i chcesz, aby ostatni segment w ścieżce do pliku mógł to zrobić.
Jeśli masz taki adres URL, jak
http://base_path/some_segment/id
możesz to zrobić.źródło
W systemie Android
Android ma wbudowaną klasę do zarządzania identyfikatorami URI.
źródło
W Javie 7+ można połączyć kilka poprzednich odpowiedzi, aby umożliwić pobranie dowolnego segmentu ścieżki z identyfikatora URI, a nie tylko ostatniego segmentu. Możemy przekonwertować URI na
java.nio.file.Path
obiekt, aby skorzystać z jegogetName(int)
metody.Niestety, statyczna fabryka
Paths.get(uri)
nie jest zbudowana do obsługi schematu http, więc najpierw musimy oddzielić schemat od ścieżki URI.Aby uzyskać ostatni segment w jednym wierszu kodu, po prostu zagnieżdżaj wiersze powyżej.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Aby uzyskać przedostatni segment, unikając numerów indeksów i potencjalnych błędów poza jednym, użyj
getParent()
metody.String secondToLast = path.getParent().getFileName().toString();
Zauważ, że
getParent()
metodę można wywoływać wielokrotnie, aby pobrać segmenty w odwrotnej kolejności. W tym przykładzie ścieżka zawiera tylko dwa segmenty, w przeciwnym razie wywołaniegetParent().getParent()
spowoduje pobranie trzeciego do ostatniego segmentu.źródło
Jeśli
commons-io
włączyłeś do swojego projektu, możesz to zrobić bez tworzenia zbędnych obiektów za pomocąorg.apache.commons.io.FilenameUtils
Da ci ostatnią część ścieżki, czyli
id
źródło
Możesz użyć
getPathSegments()
funkcji. ( Dokumentacja systemu Android )Rozważ przykładowy identyfikator URI:
Możesz uzyskać ostatni segment za pomocą:
lastSegment
będzieid
.źródło
Możesz także użyć replaceAll:
wynik:
źródło
Używam następujących w klasie użytkowej:
źródło
Pobierz adres URL z URI i użyj getFile (), jeśli nie jesteś gotowy na użycie podciągowego sposobu wypakowywania pliku.
źródło
getPath()
Nie używajgetFile()
.