Comment puis-je supprimer des caractères d'une chaîne? Par exemple: "My name @is ,Wan.;'; Wan"
.
Je voudrais supprimer les caractères '@', ',', '.', ';', '\''
de cette chaîne pour qu'elle devienne"My name is Wan Wan"
var str = "My name @is ,Wan.;'; Wan";
var charsToRemove = new string[] { "@", ",", ".", ";", "'" };
foreach (var c in charsToRemove)
{
str = str.Replace(c, string.Empty);
}
Mais je peux suggérer une autre approche si vous souhaitez supprimer tous les caractères non alphabétiques
var str = "My name @is ,Wan.;'; Wan";
str = new string((from c in str
where char.IsWhiteSpace(c) || char.IsLetterOrDigit(c)
select c
).ToArray());
Facile:
la source
Sonne comme une application idéale pour RegEx - un moteur conçu pour une manipulation rapide de texte. Dans ce cas:
la source
Moins spécifique à votre question, il est possible de supprimer TOUTES les signes de ponctuation d'une chaîne (sauf l'espace) en listant en blanc les caractères acceptables dans une expression régulière:
Notez qu'il y a un espace après ce 9 pour ne pas supprimer les espaces de votre phrase. Le troisième argument est une chaîne vide qui sert à remplacer toute sous-chaîne n'appartenant pas à l'expression régulière.
la source
Comparer diverses suggestions (ainsi que comparer dans le cadre de remplacements à un seul caractère avec différentes tailles et positions de la cible).
Dans ce cas particulier, le fractionnement sur les cibles et la jonction sur les remplacements (dans ce cas, une chaîne vide) est le plus rapide d'au moins un facteur de 3. En fin de compte, les performances sont différentes en fonction du nombre de remplacements, où les remplaçants sont en la source et la taille de la source. #ymmv
Résultats
(résultats complets ici )
Faisceau de test (LinqPad)
(note: les extensions de synchronisation
Perf
etVs
sont que j'ai écrites )la source
la source
Le moyen le plus simple serait d'utiliser
String.Replace
:la source
Une autre solution simple:
la source
la source
Une chaîne est juste un tableau de caractères, utilisez donc Linq pour effectuer le remplacement (similaire à Albin ci-dessus sauf utilise une instruction linq contains pour effectuer le remplacement):
La première chaîne est la chaîne dans laquelle remplacer les caractères et la seconde est une chaîne simple contenant les caractères
la source
Je pourrais aussi bien jeter ceci ici.
Créez une extension pour supprimer les caractères d'une chaîne:
Et c'est utilisable comme ça:
Ou juste comme ça:
la source
Il semble que le moyen le plus court soit de combiner LINQ et
string.Concat
:Voir la démo C # . Notez qu'il
string.Concat
s'agit d'un raccourci versstring.Join("", ...)
.Notez que l'utilisation d'une expression régulière pour supprimer des caractères connus individuels est toujours possible de construire dynamiquement, bien que l'on pense que l'expression régulière est plus lente. Cependant, voici un moyen de créer une telle regex dynamique (où tout ce dont vous avez besoin est une classe de caractères):
Voir une autre démo C # . Le regex ressemblera
[@,\.;']+
(une correspondance ou plus (+
) occurrences consécutives@
,,
,.
,;
ou'
caractères) où le point n'a pas à être échappé, maisRegex.Escape
sera nécessaire pour échapper à d' autres caractères qui doivent être échappées, comme\
,^
,]
ou-
dont la position à l'intérieur de la classe de caractères, vous ne pouvez pas prédire.la source
Voici une méthode que j'ai écrite qui adopte une approche légèrement différente. Plutôt que de spécifier les caractères à supprimer, j'indique à ma méthode quels caractères je veux conserver - cela supprimera tous les autres caractères.
Dans l'exemple de l'OP, il souhaite uniquement conserver les caractères alphabétiques et les espaces. Voici à quoi ressemblerait un appel à ma méthode ( démo C # ):
Voici ma méthode:
la source
Beaucoup de bonnes réponses ici, voici mon ajout ainsi que plusieurs tests unitaires qui peuvent être utilisés pour aider à tester l'exactitude, ma solution est similaire à celle de @ Rianne ci-dessus mais utilise un ISet pour fournir un temps de recherche O (1) sur les caractères de remplacement (et aussi similaire à la solution Linq de @Albin Sunnanbo).
Tests NUnit (2.6+) ici
la source
C'est une méthode puissante que j'utilise habituellement dans le même cas:
Prendre plaisir...
la source
Old School en place copie / stomp:
Pas sûr de l'efficacité avec les autres méthodes (c'est-à-dire la surcharge de tous les appels de fonction et instanciations qui se produisent comme un effet secondaire dans l'exécution C #).
la source
Je fais une méthode d'extension et avec un tableau de chaînes, je pense que
string[]
c'est plus utile quechar[]
parce que char peut également être une chaîne:alors vous pouvez l'utiliser n'importe où:
la source
J'avais besoin de supprimer les caractères spéciaux d'un fichier XML. Voici comment je l'ai fait. char.ToString () est le héros de ce code.
la source
la source
En prenant les chiffres de performances de @drzaus, voici une méthode d'extension qui utilise l'algorithme le plus rapide.
Usage
la source