Bagaimana saya menghapus karakter dari string? Sebagai contoh: "My name @is ,Wan.;'; Wan"
.
Saya ingin menghapus karakter '@', ',', '.', ';', '\''
dari string itu sehingga menjadi"My name is Wan Wan"
var str = "My name @is ,Wan.;'; Wan";
var charsToRemove = new string[] { "@", ",", ".", ";", "'" };
foreach (var c in charsToRemove)
{
str = str.Replace(c, string.Empty);
}
Tapi saya mungkin menyarankan pendekatan lain jika Anda ingin menghapus semua karakter non-huruf
var str = "My name @is ,Wan.;'; Wan";
str = new string((from c in str
where char.IsWhiteSpace(c) || char.IsLetterOrDigit(c)
select c
).ToArray());
Sederhana:
sumber
Kedengarannya seperti aplikasi ideal untuk RegEx - mesin yang dirancang untuk manipulasi teks cepat. Pada kasus ini:
sumber
Kurang spesifik untuk pertanyaan Anda, adalah mungkin untuk menghapus SEMUA tanda baca dari string (kecuali spasi) dengan mencantumkan putih karakter yang dapat diterima dalam ekspresi reguler:
Perhatikan ada spasi setelahnya 9 agar tidak menghapus spasi dari kalimat Anda. Argumen ketiga adalah string kosong yang berfungsi untuk menggantikan setiap substring yang tidak termasuk dalam ekspresi reguler.
sumber
Membandingkan berbagai saran (serta membandingkan dalam konteks penggantian satu karakter dengan berbagai ukuran dan posisi target).
Dalam kasus khusus ini, pemisahan pada target dan bergabung pada penggantian (dalam hal ini, string kosong) adalah yang tercepat dengan setidaknya faktor dari 3. Pada akhirnya, kinerja berbeda tergantung pada jumlah penggantian, di mana penggantian berada di sumber, dan ukuran sumber. #ymmv
Hasil
(hasil lengkap di sini )
Test Harness (LinqPad)
(catatan: ekstensi waktu
Perf
danVs
yang saya tulis )sumber
sumber
Cara paling sederhana adalah menggunakan
String.Replace
:sumber
Solusi sederhana lain:
sumber
sumber
Sebuah string hanyalah sebuah array karakter jadi gunakan Linq untuk melakukan penggantian (mirip dengan Albin di atas kecuali menggunakan linq berisi pernyataan untuk melakukan penggantian):
String pertama adalah string untuk mengganti chars dan yang kedua adalah string sederhana yang berisi chars
sumber
Saya mungkin juga membuang ini di sini.
Buat ekstensi untuk menghapus karakter dari string:
Dan bisa digunakan seperti ini:
Atau seperti ini:
sumber
Tampaknya cara terpendek adalah menggabungkan LINQ dan
string.Concat
:Lihat demo C # . Perhatikan bahwa itu
string.Concat
adalah jalan pintas kestring.Join("", ...)
.Perhatikan bahwa menggunakan regex untuk menghapus karakter yang dikenal secara individu masih mungkin dibuat secara dinamis, meskipun diyakini bahwa regex lebih lambat. Namun, berikut adalah cara untuk membangun regex dinamis (di mana yang Anda butuhkan adalah kelas karakter):
Lihat demo C # lainnya . Regex akan terlihat seperti
[@,\.;']+
(satu cocok atau lebih (+
) kejadian berturut-turut@
,,
,.
,;
atau'
karakter) di mana titik tidak harus melarikan diri, tetapiRegex.Escape
akan diperlukan untuk melarikan diri karakter lain yang harus melarikan diri, seperti\
,^
,]
atau-
yang posisinya di dalam kelas karakter Anda tidak dapat memprediksi.sumber
Inilah metode yang saya tulis yang menggunakan pendekatan yang sedikit berbeda. Daripada menentukan karakter yang akan dihapus, saya memberi tahu metode saya karakter mana yang ingin saya pertahankan - ini akan menghapus semua karakter lain.
Dalam contoh OP, ia hanya ingin menyimpan karakter dan spasi alfabet. Di sini akan terlihat seperti apa panggilan ke metode saya ( C # demo ):
Inilah metode saya:
sumber
Banyak jawaban bagus di sini, inilah tambahan saya bersama dengan beberapa unit test yang dapat digunakan untuk membantu menguji kebenaran, solusi saya mirip dengan @ Rianne di atas tetapi menggunakan ISet untuk memberikan O (1) waktu pencarian pada karakter pengganti (dan juga mirip dengan solusi Linq @Albin Sunnanbo).
NUnit (2.6+) menguji di sini
sumber
Ini metode yang ampuh yang biasanya saya gunakan dalam kasus yang sama:
Nikmati...
sumber
Salinan Old School di tempat:
Tidak yakin tentang efisiensi wrt metode lain (yaitu overhead semua panggilan fungsi dan instantiasi yang terjadi sebagai efek samping dalam eksekusi C #).
sumber
Saya membuatnya metode ekstensi dan dengan array string, saya pikir
string[]
lebih berguna daripadachar[]
karena char juga bisa menjadi string:maka Anda dapat menggunakannya di mana saja:
sumber
Saya perlu menghapus karakter khusus dari file XML. Begini cara saya melakukannya. char.ToString () adalah pahlawan dalam kode ini.
sumber
sumber
Mengambil angka kinerja dari @drzaus, berikut adalah metode ekstensi yang menggunakan algoritma tercepat.
Pemakaian
sumber