I have a string on which I need to do some replacements. I have a Dictionary<string, string>
where I have search-replace pairs defined. I have created following extension methods to perform this operation:
public static string Replace(this string str, Dictionary<string, string> dict) { StringBuilder sb = new StringBuilder(str); return sb.Replace(dict).ToString(); } public static StringBuild Replace(this StringBuilder sb, Dictionary<string, string> dict) { foreach (KeyValuePair<string, string> replacement in dict) { sb.Replace(replacement.Key, replacement.Value); } return sb; }
Is there a better way of doing that?
If the data is tokenized (i.e. "Dear $name$, as of $date$ your balance is $amount$"), then a Regex
can be useful:
static readonly Regex re = new Regex(@"\$(\w+)\$", RegexOptions.Compiled); static void Main() { string input = @"Dear $name$, as of $date$ your balance is $amount$"; var args = new Dictionary<string, string>( StringComparer.OrdinalIgnoreCase) { {"name", "Mr Smith"}, {"date", "05 Aug 2009"}, {"amount", "GBP200"} }; string output = re.Replace(input, match => args[match.Groups[1].Value]); }
However, without something like this, I expect that your Replace
loop is probably about as much as you can do, without going to extreme lengths. If it isn't tokenized, perhaps profile it; is the Replace
actually a problem?
Do this with Linq:
var newstr = dict.Aggregate(str, (current, value) => current.Replace(value.Key, value.Value));
dict is your search-replace pairs defined Dictionary object.
str is your string which you need to do some replacements with.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With