找到從字串中刪除特殊字元的最有效方法
您目前從字串中刪除特殊字元的方法可能看起來效率低下,但它實際上是更有效的方法之一。可以透過使用本機字元變數或枚舉器來減少陣列存取來進行最佳化。提供的程式碼提供了此改進:
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中文網其他相關文章!