Java: Mendapatkan substring dari string yang dimulai setelah karakter tertentu

196

Saya punya string:

/abc/def/ghfj.doc

Saya ingin mengekstrak ghfj.docdari ini, yaitu substring setelah yang terakhir /, atau pertama /dari kanan.

Bisakah seseorang tolong bantu?

Cerah
sumber
39
lihat, saya mengerti nilai mencari jawaban sendiri sebelum mengajukan pertanyaan, tetapi faktanya adalah pertanyaan ini membuat pencarian saya jauh lebih mudah .. persis apa yang saya inginkan setelah hit pertama. Lebih cepat daripada berkonsultasi dengan javadocs. Ada baiknya pertanyaan ini ada di sini. Mengapa downvotes?
Eric
3
Meskipun ini agak berbeda dari pertanyaan awal Anda: Dalam contoh Anda org.apache.commons.io.FilenameUtils.getBaseName jauh lebih dapat diandalkan daripada melakukan operasi string Anda sendiri.
Hingga Schäfer
4
@ Eric Saya sepenuhnya setuju dengan komentar Anda karena ini adalah hasil Google pertama untuk pertanyaan saya dan jawaban yang diterima adalah persis apa yang perlu saya gunakan.
thonnor

Jawaban:

310
    String example = "/abc/def/ghfj.doc";
    System.out.println(example.substring(example.lastIndexOf("/") + 1));
Sébastien Le Callonnec
sumber
42

Implementasi yang sangat sederhana dengan String.split():

String path = "/abc/def/ghfj.doc";
// Split path into segments
String segments[] = path.split("/");
// Grab the last segment
String document = segments[segments.length - 1];
Veer
sumber
1
kode ini akan mengeluarkan kesalahan Array Index Out of Bounds jika separator tidak ditemukan.
Patrick Parker
36

apa yang sudah kamu coba ini sangat sederhana:

String s = "/abc/def/ghfj.doc";
s.substring(s.lastIndexOf("/") + 1)
vishal_aim
sumber
23

Cara lain adalah menggunakan ini .

String path = "/abc/def/ghfj.doc"
String fileName = StringUtils.substringAfterLast(path, "/");

Jika Anda lulus nol ke metode ini, ia akan mengembalikan nol. Jika tidak ada kecocokan dengan pemisah itu akan mengembalikan string kosong.

Alex Green
sumber
1
Akhirnya sesuatu yang sangat berguna, tidak tahu tentang metode ini. Aku benci repot dengan substring + indexof + 1 - 2 +3 apa pun. Ini jauh lebih bersih :)
BAERUS
Jika Anda ingin menggunakan metode ini di Android, Anda harus mengimpor StringUtilsperpustakaan, jawaban ini menunjukkan panas untuk melakukannya: stackoverflow.com/a/33935645/2966583
stramin
9

Anda dapat menggunakan Apache commons:

Untuk substring setelah kejadian terakhir, gunakan metode ini .

Dan untuk substring setelah metode setara kemunculan pertama ada di sini .

Michal Przysucha
sumber
4

Ini juga bisa mendapatkan nama file

import java.nio.file.Paths;
import java.nio.file.Path;
Path path = Paths.get("/abc/def/ghfj.doc");
System.out.println(path.getFileName().toString());

Akan dicetak ghfj.doc

pushya
sumber
1

Di Kotlin Anda dapat menggunakan substringAfterLast, menentukan pembatas.

val string = "/abc/def/ghfj.doc"
val result = url.substringAfterLast("/")
println(result)
// It will show ghfj.doc

Dari dokumen :

Mengembalikan substring setelah pemisah terakhir. Jika string tidak mengandung pembatas, mengembalikan missingDelimiterValue yang default ke string asli.

Filipe Brito
sumber
0

Saya pikir itu akan lebih baik jika kita langsung menggunakan fungsi split

String toSplit = "/abc/def/ghfj.doc";

String result[] = toSplit.split("/");

String returnValue = result[result.length - 1]; //equals "ghfj.doc"
pengguna6317575
sumber
kode ini akan memunculkan kesalahan jika separator tidak ditemukan.
Patrick Parker
@ PatrickParker Mengapa Anda berkomentar di mana-mana bahwa itu akan menimbulkan kesalahan jika pemisah tidak ditemukan. Jika Anda melakukannya untuk tujuan pengetahuan daripada apa-apa, tapi saya pikir itu agak terlalu banyak mungkin ...
Gaurav Mall
@GauravMall Saya membantu orang untuk meningkatkan jawaban mereka, untuk menulis kode yang lebih baik, dan bagi mereka yang berkunjung untuk membantu mereka menghindari jebakan dan membangun pemahaman kode sebelum mereka menempelkannya di suatu tempat. Saya dengan senang hati akan menghapus komentar saya setelah jawabannya ditingkatkan. Juga, menulisnya di dua tempat hampir tidak "di mana-mana". Akhirnya, bagian komentar bukan untuk diskusi meta.
Patrick Parker