Saya memiliki sebagai masukan string yaitu a URI
. bagaimana mungkin untuk mendapatkan segmen jalur terakhir (yang dalam kasus saya adalah id)?
Ini adalah URL masukan saya:
String uri = "http://base_path/some_segment/id"
dan saya harus mendapatkan id yang telah saya coba dengan ini:
String strId = "http://base_path/some_segment/id";
strId = strId.replace(path);
strId = strId.replaceAll("/", "");
Integer id = new Integer(strId);
return id.intValue();
tetapi tidak berhasil, dan pasti ada cara yang lebih baik untuk melakukannya.
String idStr = new File(uri.getPath()).getName()
, sama seperti jawaban ini tetapi menggunakanFile
alih-alihString
membagi jalan.while (path.endsWith("/")) path = path.substring(0, path.length() - 1);
sumber
Uri
nama kelas Android adalah huruf kecil dan tidak dapat dibuat instance-nya. Saya telah mengoreksi jawaban Anda untuk menggunakan metode pabrik statisUri.parse()
.Berikut metode singkat untuk melakukannya:
Kode Tes:
Keluaran:
Penjelasan:
sumber
/
di kelas karakter menegasikan[^/?]
tidak perlu, karena tidak akan pernah cocok..*/
akan selalu cocok dengan yang terakhir/
di String, jadi tidak ada yang lain yang/
harus ditemui.http://example.com/foo#reply2
, Alangkah baiknya jika Anda dapat memperbarui jawaban Anda untuk menyelesaikannya. Terima kasihSaya tahu ini sudah lama, tetapi solusi di sini tampaknya agak bertele-tele. Hanya satu baris yang mudah dibaca jika Anda memiliki
URL
atauURI
:Atau jika Anda memiliki
String
:sumber
a.co/last?a=1#frag
. Saya pikir tidak, karena kode tidak substring dari simbol jalan terakhir sampai akhir:path.substring(index + 1)
.Jika Anda menggunakan Java 8 dan Anda ingin segmen terakhir di jalur file, Anda dapat melakukannya.
Jika Anda memiliki url seperti yang
http://base_path/some_segment/id
Anda bisa lakukan.sumber
Di Android
Android memiliki kelas bawaan untuk mengelola URI.
sumber
Di Java 7+, beberapa jawaban sebelumnya dapat digabungkan untuk memungkinkan pengambilan segmen jalur apa pun dari URI, bukan hanya segmen terakhir. Kita bisa mengonversi URI menjadi
java.nio.file.Path
objek, untuk memanfaatkangetName(int)
metodenya.Sayangnya, pabrik statis
Paths.get(uri)
tidak dibangun untuk menangani skema http, jadi pertama-tama kita perlu memisahkan skema dari jalur URI.Untuk mendapatkan segmen terakhir dalam satu baris kode, cukup tambahkan baris di atas.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
Untuk mendapatkan segmen kedua hingga terakhir sambil menghindari nomor indeks dan potensi kesalahan off-by-one, gunakan
getParent()
metode ini.String secondToLast = path.getParent().getFileName().toString();
Perhatikan bahwa
getParent()
metode ini dapat dipanggil berulang kali untuk mengambil segmen dalam urutan terbalik. Dalam contoh ini, jalur hanya berisi dua segmen, jika tidak, pemanggilangetParent().getParent()
akan mengambil segmen ketiga hingga terakhir.sumber
Jika Anda telah
commons-io
memasukkan dalam proyek Anda, Anda dapat melakukannya tanpa membuat objek yang tidak perlu denganorg.apache.commons.io.FilenameUtils
Akan memberi Anda bagian terakhir dari jalan, yaitu
id
sumber
Anda dapat menggunakan
getPathSegments()
fungsi. ( Dokumentasi Android )Pertimbangkan contoh URI Anda:
Anda bisa mendapatkan segmen terakhir menggunakan:
lastSegment
akan menjadiid
.sumber
Anda juga dapat menggunakan replaceAll:
hasil:
sumber
Saya menggunakan yang berikut ini di kelas utilitas:
sumber
Dapatkan URL dari URI dan gunakan getFile () jika Anda belum siap menggunakan cara substring untuk mengekstrak file.
sumber
getPath()
tidakgetFile()
.