性能和在C#中从字符串中删除多个字符

21 浏览
0 Comments

性能和在C#中从字符串中删除多个字符

在C#中,哪种方法是最高效的方式来移除多个字符?我需要移除字符串中的所有空格和连字符。

谢谢

0
0 Comments

在C#中,如果要从字符串中删除多个字符,可以使用不同的方法。然而,对于要删除的字符数量较大的情况下(例如超过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');

总结起来,如果要删除的字符数量较大,使用HashSet可能是最快的方法。而如果要删除的字符数量较小,则使用上述的字符串扩展方法可能更快。

0
0 Comments

【Performance & Remove multiple characters from a string in C#】问题的出现和解决方法

在这段代码中,我们可以看到一个字符串变量input,其中包含了一系列字符,我们希望从中移除空格和减号字符。代码通过遍历input中的每个字符,将不是空格和减号的字符保存到一个临时数组tmp中。最后,通过实例化一个新的字符串,将临时数组中的字符转化为字符串。

然而,有人提出了一个问题,即为什么要重复造轮子,因为.NET框架中已经存在一个StringBuilder类,可以更好地实现字符串的操作。有人还指出,性能优化可能会导致代码的可读性和可维护性下降。但是,有人认为这段代码是在一个独立的方法中,不会对代码的可读性和可维护性产生太大的影响。

另外,还有人提出了另一种解决方案,即使用String.Replace方法来移除空格和减号。这种方法更加简洁,也更加安全,但是也有人认为这种方法会创建一个不必要的临时字符串。

在最后,有人认为这个问题是关于性能的,而且提出的代码也是最高效的解决方案。他们认为使用Replace方法会浪费空间,因为它会创建一个没有空格和减号的临时字符串。

针对这个问题的出现和解决方法,不同的观点存在一定的争议。一方面,使用.NET框架中已有的StringBuilder类可以更好地实现字符串操作,并且提高代码的可读性和可维护性。另一方面,通过手动操作字符数组可以实现更高效的性能,但可能会降低代码的可读性。最终的选择取决于开发者对代码的优化需求和对性能的关注程度。

0
0 Comments

性能和从字符串中删除多个字符的问题在C#中的出现是因为字符串可能非常大,或者要删除的字符列表非常长。要解决这个问题,可以使用StringBuilder来提高性能。下面是解决方法的示例代码:

StringBuilder sb = new StringBuilder(text.Length);
HashSet removeChars = new HashSet{ ' ', '-' };
foreach(Char c in text)
{
    if(!removeChars.Contains(c))
        sb.Append(c);
}
text = sb.ToString();

在大多数情况下,以下代码应该足够解决问题:

foreach (String c in new[] { " ", "-" })
    text = text.Replace(c, "");

0