有没有更好的办法做到这一点…
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的长发版本比短手稍快。
更快-不 更有效-是的,如果您要使用StringBuilder该类。在您的实现中,每个操作都会生成一个字符串副本,在某些情况下可能会影响性能。字符串是 不可变的 对象,因此每个操作仅返回修改后的副本。
StringBuilder
如果您希望在Strings相当长的倍数上主动调用此方法,则最好将其实现“迁移”到StringBuilder类上。有了它,就可以直接在该实例上执行任何修改,因此可以省去不必要的复制操作。
Strings
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(); } }