ホームページ > バックエンド開発 > C++ > 文字列から特殊文字をフィルタリングする最も効率的な方法は何ですか?

文字列から特殊文字をフィルタリングする最も効率的な方法は何ですか?

Linda Hamilton
リリース: 2025-01-01 04:31:12
オリジナル
190 人が閲覧しました

What's the Most Efficient Way to Filter Special Characters from a String?

文字列内の効率的な文字フィルタリング

この記事では、文字列から特殊文字を効率的に削除し、文字列に英数字のみが含まれていることを確認するタスクについて説明します。アンダースコアとドット。

提供されたコードは、文字のループを使用するメソッドをレビューします。最も効率的なアプローチではないかもしれませんが、検証を行ってください。推奨される最適化には、列挙子の使用と、配列アクセスを減らすために予想される容量で 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート