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 ?
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._]+
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); }
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!