Harap jelaskan postingan yang dapat dipahami orang. Saya juga mengedit yang ini untuk Anda. Anda harus menentukan bahasa setidaknya di sini.
GEOCHET
Tentu saja, ini tidak pernah diganti ... itu selalu berupa string baru yang berisi string asli dengan teks yang diganti. Ini karena string tidak dapat diubah.
Pablo Marambio
saya mencoba metode `String.Replace ()`. tetapi menggantikan semua "AA" dengan "XQ"
string str ="The brown brown fox jumps over the lazy dog";
str =ReplaceFirst(str,"brown","quick");
EDIT : Seperti yang disebutkan @itsmatt , ada juga Regex.Replace (String, String, Int32), yang dapat melakukan hal yang sama, tetapi mungkin lebih mahal saat runtime, karena ini menggunakan parser berfitur lengkap di mana metode saya melakukan satu pencarian dan tiga string rangkaian.
EDIT2 : Jika ini adalah tugas umum, Anda mungkin ingin menjadikan metode metode ekstensi:
publicstaticclassStringExtension{publicstaticstringReplaceFirst(thisstring text,string search,string replace){// ...same as above...}}
Menggunakan contoh di atas sekarang mungkin untuk menulis:
Menarik, apakah Anda menguji asumsi tentang pendekatan regex yang lebih mahal saat waktu proses? Bagaimana dengan kecepatan? Mungkin pencarian menggunakan Regex lebih cepat daripada menggunakan IndexOf?
mfloryan
Saya lebih suka jawaban @BilltheLizard yang melibatkan Hapus () dan Sisipkan () daripada pendekatan ini yang melibatkan Substring (). Apakah ada dasar untuk mengatakan yang satu lebih baik dari yang lain?
JohnC
3
Hati-hati: Ini tidak berfungsi dengan baik dengan Unicode yang menggabungkan karakter atau ligatur. Misalnya, ReplaceFirst("oef", "œ", "i")salah mengembalikan "ief", bukan "jika". Lihat pertanyaan ini untuk info lebih lanjut.
Michael Liu
2
ReSharper memperingatkan String.IndexOf is culture specific.. Lebih tangguh untuk diperbarui int pos = text.IndexOf(search, StringComparison.Ordinal);.
Contango
64
Seperti kata itsmatt , Regex. Penggantian adalah pilihan yang baik untuk ini namun untuk membuat jawabannya lebih lengkap saya akan mengisinya dengan contoh kode:
using System.Text.RegularExpressions;...Regex regex =newRegex("foo");string result = regex.Replace("foo1 foo2 foo3 foo4","bar",1);// result = "bar1 foo2 foo3 foo4"
Parameter ketiga, set ke 1 dalam kasus ini, adalah jumlah kemunculan pola regex yang ingin Anda ganti dalam string input dari awal string.
Saya berharap ini bisa dilakukan dengan Regex statis. Ganti overload tetapi sayangnya tampaknya Anda memerlukan contoh Regex untuk melakukannya.
Salah satu kelebihan beban Regex.Replaceadalah int"Jumlah maksimum berapa kali penggantian dapat terjadi". Jelas, menggunakan Regex.Replaceuntuk penggantian teks biasa mungkin tampak berlebihan, tapi pasti ringkas:
Jawaban:
Contoh:
EDIT : Seperti yang disebutkan @itsmatt , ada juga Regex.Replace (String, String, Int32), yang dapat melakukan hal yang sama, tetapi mungkin lebih mahal saat runtime, karena ini menggunakan parser berfitur lengkap di mana metode saya melakukan satu pencarian dan tiga string rangkaian.
EDIT2 : Jika ini adalah tugas umum, Anda mungkin ingin menjadikan metode metode ekstensi:
Menggunakan contoh di atas sekarang mungkin untuk menulis:
sumber
ReplaceFirst("oef", "œ", "i")
salah mengembalikan "ief", bukan "jika". Lihat pertanyaan ini untuk info lebih lanjut.String.IndexOf is culture specific.
. Lebih tangguh untuk diperbaruiint pos = text.IndexOf(search, StringComparison.Ordinal);
.Seperti kata itsmatt , Regex. Penggantian adalah pilihan yang baik untuk ini namun untuk membuat jawabannya lebih lengkap saya akan mengisinya dengan contoh kode:
Parameter ketiga, set ke 1 dalam kasus ini, adalah jumlah kemunculan pola regex yang ingin Anda ganti dalam string input dari awal string.
Saya berharap ini bisa dilakukan dengan Regex statis. Ganti overload tetapi sayangnya tampaknya Anda memerlukan contoh Regex untuk melakukannya.
sumber
"foo"
, tetapi Anda akan menginginkannew Regex(Regex.Escape("foo"))
kiasan"foo"
.Lihatlah Regex . Ganti .
sumber
Dengan mempertimbangkan "hanya pertama", mungkin:
?
Atau lebih umum:
Kemudian:
sumber
akan menemukan pertama
F
diInputString
dan menggantinya denganR
.sumber
result = (New Regex("F")).Replace(InputString, "R", 1)
Metode ekstensi C # yang akan melakukan ini:
Nikmati
sumber
Dalam sintaks C #:
sumber
Dan karena ada juga VB.NET yang perlu dipertimbangkan, saya ingin menawarkan:
sumber
Mengasumsikan bahwa
AA
hanya perlu diganti jika berada di awal string:Jika Anda perlu mengganti kemunculan pertama
AA
, apakah string dimulai dengan itu atau tidak, gunakan solusi dari Marc.sumber
Salah satu kelebihan beban
Regex.Replace
adalahint
"Jumlah maksimum berapa kali penggantian dapat terjadi". Jelas, menggunakanRegex.Replace
untuk penggantian teks biasa mungkin tampak berlebihan, tapi pasti ringkas:sumber
Bagi siapa pun yang tidak keberatan dengan referensi
Microsoft.VisualBasic
, adaReplace
Metode :sumber
Contoh ini memisahkan substring (tetapi lebih lambat), tetapi mungkin jauh lebih cepat daripada RegEx:
sumber
sumber