766 votes

Comment puis-je supprimer tous les caractères non alphanumériques d’une chaîne sauf dash ?

Comment puis-je supprimer tous les caractères non alphanumériques d’une chaîne sauf dash et les caractères d’espace ?

1073voto

Amarghosh Points 33957

Remplacer `` avec une chaîne vide.

392voto

Ata Points 3959

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.

80voto

josephj1989 Points 3934

ESSAYEZ

OÙ s représente votre chaîne

51voto

Zain Ali Points 3813

À l’aide de System.Linq

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X