我知道这个问题太老了,但我想提供 2 个更有效的选项:
首先,Paul Walls 发布的扩展方法很好,但可以通过使用 StringBuilder 类提高效率,该类类似于字符串数据类型,但特别适用于您将多次更改字符串值的情况。这是我使用 StringBuilder 制作的扩展方法的一个版本:
public static string ReplaceChars(this string s, char[] separators, char newVal)
{
StringBuilder sb = new StringBuilder(s);
foreach (var c in separators) { sb.Replace(c, newVal); }
return sb.ToString();
}
我运行此操作 100,000 次,使用 StringBuilder 需要 73 毫秒,而使用字符串则需要 81 毫秒。因此差异通常可以忽略不计,除非您正在运行许多操作或使用巨大的字符串。
其次,您可以使用 1 线循环:
foreach (char c in separators) { s = s.Replace(c, '\n'); }
我个人认为这是最好的选择。它非常高效,不需要编写扩展方法。在我的测试中,这仅在 63 毫秒内运行了 100k 次迭代,使其成为最有效的。
这是上下文中的示例:
string s = "this;is,\ra\t\n\n\ntest";
char[] separators = new char[] { ' ', ';', ',', '\r', '\t', '\n' };
foreach (char c in separators) { s = s.Replace(c, '\n'); }
此示例中的前 2 行归功于 Paul Walls。