【发布时间】:2010-11-22 05:19:56
【问题描述】:
有没有更好的方法...
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();
}
}
只是为了好玩(并停止 cmets 中的参数) 我提出了一个要点,对下面的各种示例进行基准测试。
正则表达式选项得分非常高;字典选项出现最快; stringbuilder replace 的冗长版本比简写略快。
【问题讨论】:
-
根据您在基准测试中的内容,看起来字典版本并没有做所有的替换,我怀疑是什么让它比 StringBuilder 解决方案更快。
-
@toad 嗨,从 2009 年开始;我在 4 月份在下面添加了一条关于这个明显错误的评论。虽然我跳过了 D,但要点已更新。字典版本仍然更快。
-
@TotZam 至少在标记之前检查日期;这是从 2009 年开始,从 2012 年开始
-
由于这里的许多答案似乎与性能有关,我相信应该指出Andrej Adamanko's answer对于许多替代品来说可能是最快的;肯定比链接 .Replace() 更快,尤其是在他的回答中所述的大输入字符串上。
标签: c# string refactoring immutability