Trouver l'approche la plus efficace pour supprimer les caractères spéciaux des chaînes
Votre méthode actuelle pour supprimer les caractères spéciaux des chaînes peut sembler inefficace, mais elle est en fait l’une des approches les plus efficaces. Des optimisations peuvent être effectuées en utilisant une variable de caractère locale ou un énumérateur pour réduire les accès au tableau. Le code fourni offre cette amélioration :
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(); }
Comparaison des performances
Les tests de benchmarking confirment l'efficacité de la méthode améliorée. Voici les résultats pour différentes approches, en exécutant chaque fonction un million de fois sur une chaîne de 24 caractères :
Alternative aux expressions régulières
Les expressions régulières peuvent également être utilisées pour cette tâche, mais elles sont nettement plus lentes qu'une simple manipulation de chaîne. Voici un exemple :
public static string RemoveSpecialCharactersRegex(string str) { return Regex.Replace(str, @"[^0-9a-zA-Z\._]", ""); }
Optimisation de la table de recherche
Une autre solution efficace consiste à créer une table de recherche pour les caractères autorisés :
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); }
Ceci Cette approche surpasse à la fois les méthodes originales et améliorées en termes de vitesse d'exécution, mais se fait au prix de l'initialisation et de la maintenance d'une grande table de recherche dans mémoire.
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!