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?


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:



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];

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)

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.


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 .


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



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.


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"

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.