栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从字符串中删除特殊字符的最有效方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从字符串中删除特殊字符的最有效方法

为什么您认为您的方法效率不高?实际上,这是最有效的方法之一。

您当然应该将字符读入局部变量,或者使用枚举数来减少数组访问的次数:

public static string RemoveSpecialCharacters(this string str) {   StringBuilder sb = new StringBuilder();   foreach (char c in str) {      if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '.' || c == '_') {         sb.Append(c);      }   }   return sb.ToString();}

使这种方法高效的一件事是,它可以很好地扩展。执行时间将相对于字符串的长度。如果将它用在大字符串上没有令人讨厌的惊喜。

编辑:
我进行了一项快速的性能测试,使用24个字符串运行每个功能一百万次。结果如下:

原始功能:54.5毫秒。
我建议的更改:47.1毫秒。
设置StringBuilder容量的矿井:43.3毫秒。
正则表达式:294.4 ms。

编辑2:我在上面的代码中添加了AZ和az之间的区别。(我重新进行了性能测试,没有明显的区别。)

编辑3:
我测试了lookup + char []解决方案,它运行约13毫秒。

当然,要付出的代价是巨大查找表的初始化并将其保存在内存中。嗯,这不是很多数据,但是对于这样一个微不足道的功能来说却是很多…

private static bool[] _lookup;static Program() {   _lookup = new bool[65536];   for (char c = '0'; c <= '9'; c++) _lookup[c] = true;   for (char c = 'A'; c <= 'Z'; c++) _lookup[c] = true;   for (char c = 'a'; c <= 'z'; c++) _lookup[c] = true;   _lookup['.'] = true;   _lookup['_'] = true;}public static string RemoveSpecialCharacters(string str) {   char[] buffer = new char[str.Length];   int index = 0;   foreach (char c in str) {      if (_lookup[c]) {         buffer[index] = c;         index++;      }   }   return new string(buffer, 0, index);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442767.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号