表演&从C#中的字符串中删除多个字符

时间:2014-08-08 09:31:23

标签: c# asp.net .net

从C#字符串中删除多个字符的性能最强哪种有效方法?我必须从C#字符串中删除所有空格,连字符。

由于

3 个答案:

答案 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);