Saya memiliki string yang disebut "hello world"
Saya perlu mengganti kata "dunia" menjadi "csharp"
untuk ini saya gunakan:
string.Replace("World", "csharp");
tetapi sebagai hasilnya, saya tidak mendapatkan string diganti. Alasannya adalah sensitivitas kasus. String asli berisi "dunia" sedangkan saya mencoba mengganti "Dunia".
Apakah ada cara untuk menghindari sensitivitas huruf ini dalam metode string. Ganti?
Jawaban:
Anda bisa menggunakan Regex dan melakukan penggantian case yang tidak sensitif:
sumber
hello. world?
atau apa pun yang mengandung operator regex.The Regex.Escape berguna jika Anda mengandalkan input pengguna yang dapat berisi unsur bahasa Regex
Memperbarui
Berkat komentar, Anda sebenarnya tidak perlu melarikan diri dari string pengganti.
Berikut adalah biola kecil yang menguji kode :
Outputnya adalah:
sumber
Regex.Escape
buruk, itu akan mengawali karakter khusus dengan garis miring terbalik. Sepertinya cara terbaik adalah .Replace ("$", "$$"), yang agak bodoh ( stackoverflow.com/a/10078353 ).2.5X metode LEBIH CEPAT dan PALING EFEKTIF daripada metode ekspresi reguler lainnya:
Catatan: abaikan case ==
StringComparison.OrdinalIgnoreCase
sebagai parameter untukStringComparison comparisonType
. Ini adalah cara tercepat, tidak peka huruf besar-kecil untuk mengganti semua nilai.Keuntungan dari metode ini:
newValue
kenull
), dioptimalkan untuk ini;string.Replace
perilaku , pengecualian yang sama;Benchmark-proof : solusi ini 2,59 kali lebih cepat daripada regex dari @Steve B., kode:
Ide asli - @ Darky711; terima kasih @MinerR untuk
StringBuilder
.sumber
String
. Namun,StringBuilder
ini benar-benar lebih cepat 30-40% dariString
. Saya telah memperbarui solusinya. Terima kasih;)Ekstensi membuat hidup kita lebih mudah:
sumber
Banyak saran menggunakan Regex. Bagaimana dengan metode ekstensi ini tanpa itu:
sumber
comparison
parameter harus digunakanIndexOf
, bukanStringComparison.CurrentCultureIgnoreCase
if(old.Equals(@new, comparison)) return @new;
karena string baru mungkin berbeda dalam huruf besar / huruf kecil.Anda dapat menggunakan namespace Microsoft.VisualBasic untuk menemukan fungsi pembantu ini:
sumber
( Diedit: tidak mengetahui masalah 'tautan telanjang', maaf soal itu)
Diambil dari sini :
Tampaknya Anda bukan yang pertama mengeluh tentang kurangnya string case sensitif. Ganti.
sumber
Jawaban @ Darky711 yang dimodifikasi untuk menggunakan jenis perbandingan yang diteruskan dan mencocokkan kerangka kerja menggantikan penamaan dan komentar xml sedekat mungkin.
sumber
Saya telah menulis metode ekstensi:
Saya menggunakan dua metode ekstensi tambahan untuk metode ekstensi sebelumnya:
sumber
IsNot
mengambil ekstensi terlalu serius :).IsNot
Memperluas jawaban Petrucio dengan
Regex.Escape
pada string pencarian, dan melarikan diri dari grup yang cocok seperti yang disarankan dalam jawaban Steve B (dan beberapa perubahan kecil pada selera saya):Yang akan menghasilkan hasil yang diharapkan sebagai berikut:
Namun tanpa melakukan pelarian Anda akan mendapatkan yang berikut, yang bukan perilaku yang diharapkan dari
String.Replace
yang hanya case-sensitive:sumber
Bukankah ini bekerja: Saya tidak bisa membayangkan hal lain menjadi lebih cepat atau mudah.
sumber
Fungsi di bawah ini untuk menghapus semua kata yang cocok seperti (ini) dari rangkaian string. Oleh Ravikant Sonare.
sumber
Menggunakan solusi @Georgy Batalov, saya mengalami masalah saat menggunakan contoh berikut ini
string original = "bla, DC = bleh, DC = blih, DC = bloh, DC = com"; string diganti = original.ReplaceIgnoreCase (", DC =", ".")
Di bawah ini adalah bagaimana saya menulis ulang ekstensinya
sumber
di bawah ini adalah alternatif untuk mengganti karakter huruf yang mengabaikan string
sumber
Anda juga dapat mencoba
Regex
kelas.var regex = new Regex( "camel", RegexOptions.IgnoreCase ); var newSentence = regex.Replace( sentence, "horse" );
sumber
Saya lebih suka ini - "Halo Dunia" .ToLower (). Ganti ("dunia", "csharp");
sumber