文字列内の効率的な文字フィルタリング
この記事では、文字列から特殊文字を効率的に削除し、文字列に英数字のみが含まれていることを確認するタスクについて説明します。アンダースコアとドット。
提供されたコードは、文字のループを使用するメソッドをレビューします。最も効率的なアプローチではないかもしれませんが、検証を行ってください。推奨される最適化には、列挙子の使用と、配列アクセスを減らすために予想される容量で 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 中国語 Web サイトの他の関連記事を参照してください。