首页 >后端开发 >C++ >从字符串中过滤特殊字符的最有效方法是什么?

从字符串中过滤特殊字符的最有效方法是什么?

Linda Hamilton
Linda Hamilton原创
2025-01-01 04:31:12163浏览

What's the Most Efficient Way to Filter Special Characters from a String?

字符串中的高效字符过滤

本文解决了从字符串中有效删除特殊字符的任务,确保它只包含字母数字字符,下划线和点。

提供的代码审查了使用循环进行字符验证的方法,尽管它可能不是最有效的方法。建议的优化涉及使用枚举器并使用预期容量初始化 StringBuilder 以减少数组访问。

对于 более 高效选项,可以使用正则表达式,但对于短字符串,性能可能会受到影响。以下正则表达式将成功匹配允许的字符:

[0-9A-Za-z._]+

但是,在这种情况下,查找表的性能优于字符串操作和正则表达式。查找表存储指示每个字符是否被允许的布尔值,显着加快过滤过程。

包含查找表的完整解决方案:

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);
}

性能测试表明查找表该方法比循环方法或正则表达式要快得多,24 个字符的字符串的执行时间约为 13 毫秒。

以上是从字符串中过滤特殊字符的最有效方法是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn