Saya bisa menggunakan ini:
String str = "TextX Xto modifyX";
str = str.replace('X','');//that does not work because there is no such character ''
Apakah ada cara untuk menghapus semua kemunculan karakter X
dari sebuah String di Jawa?
Saya mencoba ini dan bukan yang saya inginkan: str.replace('X',' '); //replace with space
Jawaban:
Coba gunakan overload yang membutuhkan
CharSequence
argumen (misalnya,String
) daripadachar
:sumber
CharSequence
. docs.oracle.com/javase/7/docs/api/java/lang/…X
tipe char?toString
terlebih dahulu. Jadi kode Anda akan terlihat sepertistr = str.replace(yourChar.toString(), "");
str = str.replace("\uffff", "");
Menggunakan
akan bekerja.
Penggunaan akan
str.replace("X", "");
.Mengeksekusi
pengembalian:
sumber
replace
kelebihan yang dibutuhkanCharSequence
.Jika Anda ingin melakukan sesuatu dengan Java Strings, Commons Lang StringUtils adalah tempat yang tepat untuk melihat.
sumber
replace
.Ini adalah contoh di mana saya telah menghapus karakter - dari String.
sumber
Saya suka menggunakan RegEx dalam kesempatan ini:
di mana g berarti global sehingga akan melewati seluruh string Anda dan ganti semua X dengan ''; jika Anda ingin mengganti X dan x, Anda cukup mengatakan:
(Lihat biola saya di sini: biola )
sumber
Halo, Coba kode ini di bawah ini
sumber
Gunakan replaceAll alih-alih ganti
Ini akan memberi Anda jawaban yang diinginkan.
sumber
return Pattern.compile(target.toString(), Pattern.LITERAL).matcher( this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
sumber
input = "deletes all blanks too";
memberikan "deletesalllankstoo"di sini adalah fungsi lambda yang menghapus semua karakter yang dilewatkan sebagai string
String str = "TextX XYto modifyZ";
deleteChars.apply( str, "XYZ" ); // –> "Text to modify"
Solusi ini memperhitungkan bahwa String yang dihasilkan - berbeda dengan
replace()
- tidak pernah menjadi lebih besar dari String awal ketika menghapus karakter. Jadi itu menghindari pengalokasian dan penyalinan yang berulang sambil menambahkan karakter keStringBuilder
sepertireplace()
halnya.Belum lagi generasi yang tidak berguna
Pattern
danMatcher
contohreplace()
yang tidak pernah diperlukan untuk dihapus.Berbeda dengan
replace()
solusi ini dapat menghapus beberapa karakter dalam satu gerakan.sumber
str.replace("…", "")
instantiateprivate Pattern(…)
dan kemudian pada panggilan pola yang dihasilkanpublic String replaceAll(String repl)
. Jadi panggilan fungsi berikut terjadi:return Pattern.compile(target.toString(), Pattern.LITERAL).matcher( this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
- lihat komentar Sal_Vader_808. Semua dalam semua ca 3 kali lebih lama dari solusi lambda pinggul saya . Dan di sini dijelaskan dengan baik mengapa solusi lambda pinggul saya juga lebih cepat: Mengapa Java's String :: replace () begitu lambat?Evaluasi jawaban utama dengan tolok ukur kinerja yang menegaskan kekhawatiran bahwa jawaban yang dipilih saat ini membuat operasi regex mahal di bawah tenda
Sampai saat ini jawaban yang diberikan datang dalam 3 gaya utama (mengabaikan jawaban JavaScript;)):
Dalam hal ukuran kode jelas String.replace adalah yang paling singkat. Implementasi Java sederhana sedikit lebih kecil dan lebih bersih (IMHO) daripada Lambda (jangan salah paham - Saya sering menggunakan Lambdas jika sesuai)
Kecepatan eksekusi adalah, dalam urutan tercepat ke paling lambat: implementasi Java sederhana, Lambda dan kemudian String.replace () (yang memanggil regex).
Sejauh ini, implementasi tercepat adalah implementasi Java sederhana yang disetel sehingga mengalokasi buffer StringBuilder ke panjang hasil maksimal yang mungkin dan kemudian hanya menambahkan karakter ke buffer yang tidak ada dalam string "karakter yang akan dihapus". Ini menghindari setiap realokasi yang akan terjadi untuk panjang Strings> 16 chars (alokasi default untuk StringBuilder) dan menghindari hit kinerja "slide kiri" untuk menghapus karakter dari salinan string yang terjadi adalah implementasi Lambda.
Kode di bawah ini menjalankan tes benchmark sederhana, menjalankan setiap implementasi 1.000.000 kali dan mencatat waktu yang berlalu.
Hasil yang tepat bervariasi setiap kali dijalankan tetapi urutan kinerja tidak pernah berubah:
Implementasi Lambda (seperti yang disalin dari jawaban Kaplan) mungkin lebih lambat karena melakukan "pergeseran ke kiri oleh satu" dari semua karakter di sebelah kanan karakter yang dihapus. Ini jelas akan menjadi lebih buruk untuk string yang lebih panjang dengan banyak karakter yang membutuhkan penghapusan. Juga mungkin ada beberapa overhead dalam implementasi Lambda itu sendiri.
Implementasi String.replace, menggunakan regex dan melakukan regex "kompilasi" pada setiap panggilan. Optimasi ini akan menggunakan regex secara langsung dan cache pola yang dikompilasi untuk menghindari biaya kompilasi setiap kali.
sumber
fromString.replace("X", "").replace("Y", "").replace("Z", "");
dibutuhkan. Sekarang kita mendapatkan waktu yang tepat: Mulai waktu sederhana: 759 | Mulai lambda Waktu: 1092 | Mulai deleteCharsLambda () Waktu: 1420 | Mulai ganti yang diperbaiki Waktu: 4636Anda harus meletakkan karakter yang harus dihapus di dalam tanda kurung siku selama waktu penggantian. Contoh kode adalah sebagai berikut:
sumber
Anda dapat menggunakan
str = str.replace("X", "");
seperti yang disebutkan sebelumnya dan Anda akan baik-baik saja. Karena informasi Anda''
bukan karakter yang kosong (atau valid) tetapi'\0'
.Jadi Anda bisa menggunakannya
str = str.replace('X', '\0');
sebagai gantinya.sumber