Apakah ada cara yang lebih baik untuk mengganti string?
Saya terkejut bahwa Ganti tidak mengambil dalam array karakter atau array string. Saya kira saya bisa menulis ekstensi saya sendiri tetapi saya ingin tahu apakah ada cara yang lebih baik untuk melakukan hal berikut? Perhatikan Ganti terakhir adalah string bukan karakter.
myString.Replace(';', '\n').Replace(',', '\n').Replace('\r', '\n').Replace('\t', '\n').Replace(' ', '\n').Replace("\n\n", "\n");
\t
dan\r
termasuk dalam\s
. Jadi regex Anda setara dengan[;,\s]
.\s
sebenarnya setara dengan[ \f\n\r\t\v]
jadi Anda memasukkan beberapa hal di sana yang tidak ada dalam pertanyaan awal. Selain itu, pertanyaan awal menanyakanReplace("\n\n", "\n")
yang tidak ditangani oleh regex Anda.Jika Anda merasa sangat pintar dan tidak ingin menggunakan Regex:
Anda bisa membungkus ini dengan metode ekstensi dengan sedikit usaha juga.
Sunting: Atau hanya menunggu 2 menit dan akhirnya saya akan menulisnya :)
Dan voila ...
sumber
Regex.Replace
lebih dari 8x lebih lambat dari beberapastring.Replace
panggilan berturut-turut. dan 4x lebih lambat dariSplit
+Join
. Lihat gist.github.com/MarcinJuraszek/c1437d925548561ba210a1c6ed144452Anda bisa menggunakan fungsi Agregat Linq:
Inilah metode ekstensi:
Contoh penggunaan metode ekstensi:
sumber
Ini cara terpendek:
sumber
Ohhh, horor kinerja! Jawabannya agak ketinggalan jaman, tapi tetap saja ...
sumber
String adalah array char yang tidak berubah
Anda hanya perlu membuatnya bisa berubah:
StringBuilder
unsafe
dunia dan bermain dengan pointer (meskipun berbahaya)dan coba untuk mengulangi array karakter paling sedikit kali. Perhatikan di
HashSet
sini, karena ia menghindari untuk melintasi urutan karakter di dalam loop. Jika Anda membutuhkan pencarian yang lebih cepat, Anda bisa menggantinyaHashSet
dengan pencarian yang dioptimalkanchar
(berdasarkan padaarray[256]
).Contoh dengan StringBuilder
Edit - Versi yang dioptimalkan
Maka Anda cukup menggunakannya seperti ini:
sumber
wchar_t
di .net, Anda hanya mengganti sebagian dari semua karakter yang mungkin (dan Anda akan membutuhkan 65536 bools untuk mengoptimalkannya ...)Anda juga dapat menulis metode ekstensi string ini , dan menempatkannya di suatu tempat di solusi Anda:
Panggil mereka seperti ini:
Dan ini:
sumber
Gunakan RegEx.Replace, sesuatu seperti ini:
Berikut info lebih lanjut tentang dokumentasi MSDN ini untuk RegEx.Replace
sumber
Kinerja-Bijaksana ini mungkin bukan solusi terbaik tetapi berhasil.
sumber
sumber