Maison > développement back-end > C++ > Quelle est la manière la plus efficace de filtrer les caractères spéciaux d'une chaîne ?

Quelle est la manière la plus efficace de filtrer les caractères spéciaux d'une chaîne ?

Linda Hamilton
Libérer: 2025-01-01 04:31:12
original
143 Les gens l'ont consulté

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

Filtrage efficace des caractères dans les chaînes

Cet article aborde la tâche de suppression efficace des caractères spéciaux d'une chaîne, en garantissant qu'elle ne contient que des caractères alphanumériques, les traits de soulignement et les points.

Le code fourni passe en revue une méthode utilisant une boucle pour la validation des caractères, bien que ce ne soit peut-être pas l'approche la plus efficace. L'optimisation suggérée implique l'utilisation d'un énumérateur et l'initialisation d'un StringBuilder avec la capacité attendue pour réduire les accès aux tableaux.

Pour une option plus efficace, des expressions régulières peuvent être utilisées, mais les performances peuvent souffrir pour les chaînes courtes. L'expression régulière suivante correspondrait avec succès aux caractères autorisés :

[0-9A-Za-z._]+
Copier après la connexion

Cependant, une table de recherche surpasse à la fois la manipulation de chaînes et les expressions régulières dans ce scénario. La table de recherche stocke des valeurs booléennes indiquant si chaque caractère est autorisé, accélérant considérablement le processus de filtrage.

La solution complète intégrant une table de recherche :

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);
}
Copier après la connexion

Les tests de performances montrent que la table de recherche L'approche est nettement plus rapide que la méthode de boucle ou l'expression régulière, avec un temps d'exécution d'environ 13 millisecondes pour une chaîne de 24 caractères.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal