从C#字符串中删除多个字符的性能最强哪种有效方法?我必须从C#字符串中删除所有空格,连字符。
由于
答案 0 :(得分:1)
如果您关心性能,因为字符串可能很大和/或删除字符的列表很长,您应该使用StringBuilder
。
StringBuilder sb = new StringBuilder(text.Length);
HashSet<Char> removeChars = new HashSet<Char>{ ' ', '-' };
foreach(Char c in text)
{
if(!removeChars.Contains(c))
sb.Append(c);
}
text = sb.ToString();
在大多数情况下,这应该足够了:
foreach (String c in new[] { " ", "-" })
text = text.Replace(c, "");
答案 1 :(得分:0)
如果要删除的字符列表很大(比如超过10个字符左右,但你必须仔细检查时间),那么Tim使用HashSet
的方法可能是最快的。
但是,如果要删除的字符列表很小,则此代码可能会更快:
public static class StringExt
{
public static string Remove(this string self, params char[] charsToRemove)
{
var result = new StringBuilder();
foreach (char c in self)
if (Array.IndexOf(charsToRemove, c) == -1)
result.Append(c);
return result.ToString();
}
}
对于您的示例(从字符串中删除空格和连字符),您可以执行以下操作(这也会删除制表符和换行符,但如果您不需要它们,则只删除这些参数):
string original = "1 2\n3\t4-5";
string result = original.Remove(' ', '-', '\n', '\t');
答案 2 :(得分:-1)
var input = @"-a b c-";
var index = 0;
var tmp = new char[input.Length];
foreach (var c in input)
{
if (c != ' ' && c != '-')
{
tmp[index++] = c;
}
}
var result = new string(tmp, 0, index);