一尘不染

在C#中替换多个字符串元素

c#

有没有更好的办法做到这一点…

MyString.Trim().Replace("&", "and").Replace(",", "").Replace("  ", " ")
         .Replace(" ", "-").Replace("'", "").Replace("/", "").ToLower();

我已经扩展了字符串类,以将其简化为一项工作,但是有一种更快的方法吗?

public static class StringExtension
{
    public static string clean(this string s)
    {
        return s.Replace("&", "and").Replace(",", "").Replace("  ", " ")
                .Replace(" ", "-").Replace("'", "").Replace(".", "")
                .Replace("eacute;", "é").ToLower();
    }
}

只是为了好玩(并停止评论中的论点),我已提拔要点,对以下各种示例进行基准测试。

https://gist.github.com/ChrisMcKee/5937656

regex选项的得分非常高;字典选项出现最快;stringbuilder replace的长发版本比短手稍快。


阅读 1845

收藏
2020-05-19

共1个答案

一尘不染

更快-不 更有效-是的,如果您要使用StringBuilder该类。在您的实现中,每个操作都会生成一个字符串副本,在某些情况下可能会影响性能。字符串是
不可变的 对象,因此每个操作仅返回修改后的副本。

如果您希望在Strings相当长的倍数上主动调用此方法,则最好将其实现“迁移”到StringBuilder类上。有了它,就可以直接在该实例上执行任何修改,因此可以省去不必要的复制操作。

public static class StringExtention
{
    public static string clean(this string s)
    {
        StringBuilder sb = new StringBuilder (s);

        sb.Replace("&", "and");
        sb.Replace(",", "");
        sb.Replace("  ", " ");
        sb.Replace(" ", "-");
        sb.Replace("'", "");
        sb.Replace(".", "");
        sb.Replace("eacute;", "é");

        return sb.ToString().ToLower();
    }
}
2020-05-19