例如,
string myString1 = "abcdef";
string myString2;
myString2 = myString1.Replace("a", "abc").Replace("b", "bcd");
Run Code Online (Sandbox Code Playgroud)
输出将为“abcdcbcdcdef”。我希望我的输出是“abcbcdcdef”。我知道你可以使用 StringBuilder 来做到这一点,但是有更短的版本吗?我需要对大量字符(> 100)执行此操作。
最简单的方法可能是循环遍历字符串的字符:
string myString1 = "abcdef";
StringBuilder result = new StringBuilder();
foreach (char c in myString1)
{
if (c == 'a') // if the character is a, append abc
{
result.Append("abc");
}
else if (c == 'b') // if the character is b, append bcd
{
result.Append("bcd");
}
else // otherwise append the character verbatim
{
result.Append(c);
}
}
string myString2 = result.ToString(); // produce a string from the StringBuilder
Run Code Online (Sandbox Code Playgroud)
这会根据需要生成“abcbcdcdef”。
另一种方法是将正则表达式与自定义求值器一起使用:
string myString1 = "abcdef";
string myString2 = Regex.Replace(myString1, "[ab]", new MatchEvaluator(
m => m.Value switch {
"a" => "abc",
"b" => "bcd",
_ => m.Value
})
);
Run Code Online (Sandbox Code Playgroud)
正则表达式[ab]将匹配该字符a或该字符b并将其传递给 中的求值器m.Value。您可以在此处使用范围(例如[a-z]),它将字母表中的任何字符传递给求值器方法。由于 switch 语句的“其他”部分仅返回原始值,因此您可以使用比您实际想要替换的值更大的范围。
这也会产生“abcbcdcdef”。