【发布时间】:2016-09-21 08:35:06
【问题描述】:
我的字符串数组包含不允许的字符:
public static string[] IllegalCharacters = { "\"", "/", "\\", "[", "]", ":", "|", "<", ">", "+", "=", ";", ",", "?", "*", "\'", "@", ".", ":", "^", "¨", "å", "ä", "ö", "Å", "Ä", "Ö" };
我可以用这样的 foreach 一个接一个地删除字符:
private string RemoveIllegalCharactersFromString(string text)
{
foreach (string illegalCharacter in IllegalCharacters.IllegalCharacters)
{
text = text.Replace(illegalCharacter, "");
}
return text;
}
我的问题是我可以改用 linq lambda 表达式来删除该方法吗?
我现在用的是什么:
public static HashSet<char> IllegalCharacters = new HashSet<char>(new char[] { '\"', '/', '\\', '[', ']', ':', '|', '<', '>', '+', '=', ';', ',', '?', '*', '\'', '@', '.', ':', '^', '¨','\'' });
var t = sourceText.Where(c => !IllegalCharacters.Contains(c)).ToArray();
var result = new string(t);
return result;
【问题讨论】:
-
您应该测试您的方法是否更有效,您可以通过在类似here 的循环中使用
StringBuilder.Replace轻松改进它。 -
您能否提供任何信息,说明为什么使用 StringBuilder 会“更快”
-
我没有说“更快”而是“更高效”。它可能会使用更少的内存或阻止垃圾收集器启动。所以
StringBuilder.Replacecan be more efficient.Btw,如果你想删除子字符串而不是字符,LINQ 方法将不再适用。