字符串中的高效字符过滤
本文解决了从字符串中有效删除特殊字符的任务,确保它只包含字母数字字符,下划线和点。
提供的代码审查了使用循环进行字符验证的方法,尽管它可能不是最有效的方法。建议的优化涉及使用枚举器并使用预期容量初始化 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中文网其他相关文章!