You can use Regex.Replace
. Something like this:
string str = "Hello WorLLd"; //Substitui só os 'l' e não o 'L'
str = Regex.Replace(str, "l", "EL", RegexOptions.IgnoreCase);
Console.WriteLine("My string: " + str);
For those of you who do not like Regex
, I found this solution on a answer in the OS :
public static string ReplaceString(string str, string oldValue, string newValue, StringComparison comparison = StringComparison.CurrentCultureIgnoreCase) {
StringBuilder sb = new StringBuilder();
int previousIndex = 0;
int index = str.IndexOf(oldValue, comparison);
while (index != -1) {
sb.Append(str.Substring(previousIndex, index - previousIndex));
sb.Append(newValue);
index += oldValue.Length;
previousIndex = index;
index = str.IndexOf(oldValue, index, comparison);
}
sb.Append(str.Substring(previousIndex));
return sb.ToString();
}
I placed GitHub for future reference .
The secret is the StringComparison
enumeration. in IndexOf()
. Usage:
ReplaceString("Hello WorLLd", "l", "EL")
You have another answer in SO which is a bit better as it is already an extension method for string
e avoid a StringBuilder
. But building while
with break
is unnecessary. Ideally I'd like to improve this, but it still seems like a better solution anyway.
public static class StringExtensions {
public static string Replace(this string originalString, string oldValue, string newValue, StringComparison comparisonType) {
int startIndex = 0;
while (true) {
startIndex = originalString.IndexOf(oldValue, startIndex, comparisonType);
if (startIndex == -1)
break;
originalString = originalString.Substring(0, startIndex) + newValue + originalString.Substring(startIndex + oldValue.Length);
startIndex += newValue.Length;
}
return originalString;
}
}
I placed GitHub for future reference .