Comment puis-je supprimer tous les caractères non alphanumériques d’une chaîne sauf dash et les caractères d’espace ?
Réponses
Trop de publicités?J'aurais pu utiliser des RegEx, ils peuvent fournir une solution élégante, mais ils peuvent causer performane questions. Voici une solution
char[] arr = str.ToCharArray();
arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c)
|| char.IsWhiteSpace(c)
|| c == '-')));
str = new string(arr);
Lors de l'utilisation du compact framework (qui n'ont pas FindAll)
Remplacer FindAll avec1
char[] arr = str.Where(c => (char.IsLetterOrDigit(c) ||
char.IsWhiteSpace(c) ||
c == '-')).ToArray();
str = new string(arr);
1 Commentaire par ShawnFeatherly
Mise à jour
Pour mettre un peu de substance à des réclamations dans les commentaires, voici quelques numéros de la comparaison de regex solution et celle que j'ai proposée.
Pour une chaîne de caractères contenant des lettres, des tirets, des chiffres et d'autres caractères:
Length of the string: 80
Number of iterations: 1000000
Jitter removed.
Time for regex solution: 17386 ms
Time for regex solution (compiled): 12931 ms
Time for my solution: 2610 ms
C'est environ 6 fois plus rapide que la regex avec aucune option, et 4 fois plus rapide puis la version compilée.