Maison > développement back-end > C++ > Comment puis-je supprimer plus efficacement les caractères spéciaux des chaînes en C# ?

Comment puis-je supprimer plus efficacement les caractères spéciaux des chaînes en C# ?

Barbara Streisand
Libérer: 2024-12-29 20:22:12
original
666 Les gens l'ont consulté

How Can I Most Efficiently Remove Special Characters from Strings in C#?

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

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 :

  • Fonction originale : 54,5 ms
  • Fonction améliorée : 47,1 ms
  • Expression régulière : 294,4 ms

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\._]", "");
}
Copier après la connexion

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

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!

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