文字列から特殊文字を削除する最も効率的なアプローチを見つける
文字列から特殊文字を削除する現在の方法は非効率的に見えるかもしれませんが、実際には、より効率的なアプローチの 1 つです。ローカル文字変数または列挙子を使用して最適化を行い、配列アクセスを減らすことができます。提供されたコードは次の改善を提供します。
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 文字の文字列に対して各関数を 100 万回実行した、さまざまなアプローチの結果を次に示します。
正規表現の代替
正規表現もこのタスクに使用できますが、単純な文字列操作よりも大幅に時間がかかります。以下に例を示します。
public static string RemoveSpecialCharactersRegex(string str) { return Regex.Replace(str, @"[^0-9a-zA-Z\._]", ""); }
ルックアップ テーブルの最適化
もう 1 つの効率的な解決策には、許可された文字のルックアップ テーブルを作成することが含まれます。
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); }
これこのアプローチは実行速度の点で元の方法と改良された方法の両方を上回っていますが、大規模な初期化と維持というコストがかかります。メモリ内のルックアップ テーブル。
以上がC# の文字列から特殊文字を最も効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。