找到从字符串中删除特殊字符的最有效方法
您当前从字符串中删除特殊字符的方法可能看起来效率低下,但它是实际上是更有效的方法之一。可以通过使用本地字符变量或枚举器来减少数组访问来进行优化。提供的代码提供了此改进:
public static string RemoveSpecialCharacters(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 个字符的字符串上运行每个函数一百万次:
正则表达式替代
正则表达式也可以用于此任务,但它们比简单的字符串操作慢得多。这是一个示例:
public static string RemoveSpecialCharactersRegex(string str) { return Regex.Replace(str, @"[^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 RemoveSpecialCharactersLookup(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); }
This该方法在执行速度方面优于原始方法和改进方法,但代价是初始化和维护大型查找表记忆中。
以上是如何最有效地从 C# 字符串中删除特殊字符?的详细内容。更多信息请关注PHP中文网其他相关文章!