Existe-t-il une meilleure façon de remplacer les chaînes?
Je suis surpris que Replace ne prenne pas dans un tableau de caractères ou un tableau de chaînes. Je suppose que je pourrais écrire ma propre extension, mais j'étais curieux de savoir s'il existe une meilleure façon intégrée de faire ce qui suit? Notez que le dernier remplacement est une chaîne et non un caractère.
myString.Replace(';', '\n').Replace(',', '\n').Replace('\r', '\n').Replace('\t', '\n').Replace(' ', '\n').Replace("\n\n", "\n");
\t
et\r
sont inclus dans\s
. Donc, votre expression régulière est équivalente à[;,\s]
.\s
équivaut en fait à[ \f\n\r\t\v]
inclure des éléments qui ne figuraient pas dans la question initiale. De plus, la question originale demandeReplace("\n\n", "\n")
ce que votre regex ne gère pas.Si vous vous sentez particulièrement intelligent et ne souhaitez pas utiliser Regex:
Vous pouvez également intégrer cela dans une méthode d'extension avec peu d'effort.
Edit: Ou attendez juste 2 minutes et je finirai par l'écrire quand même :)
Et voilà ...
la source
Regex.Replace
plus de 8 fois plus lent que plusieursstring.Replace
appels consécutifs. et 4x plus lent queSplit
+Join
. Voir gist.github.com/MarcinJuraszek/c1437d925548561ba210a1c6ed144452Vous pouvez utiliser la fonction Aggregate de Linq:
Voici la méthode d'extension:
Exemple d'utilisation de la méthode d'extension:
la source
C'est le moyen le plus court:
la source
Ohhh, l'horreur de la performance! La réponse est un peu dépassée, mais quand même ...
la source
Les chaînes ne sont que des tableaux de caractères immuables
Il vous suffit de le rendre mutable:
StringBuilder
unsafe
monde et jouer avec des pointeurs (dangereux cependant)et essayez de parcourir le tableau de caractères le moins de fois possible. Notez l'
HashSet
ici, car cela évite de parcourir la séquence de caractères à l'intérieur de la boucle. Si vous avez besoin d'une recherche encore plus rapide, vous pouvez la remplacerHashSet
par une recherche optimisée pourchar
(basée sur unarray[256]
).Exemple avec StringBuilder
Edit - Version optimisée
Ensuite, utilisez-le simplement comme ceci:
la source
wchar_t
en .net, vous ne remplacez qu'un sous-ensemble de tous les caractères possibles (et vous aurez besoin de 65536 booléens pour optimiser cela ...)Vous pouvez également simplement écrire ces méthodes d'extension de chaîne et les placer quelque part dans votre solution:
Appelez-les comme ceci:
Et ça:
la source
Utilisez RegEx.Replace, quelque chose comme ceci:
Voici plus d'informations sur cette documentation MSDN pour RegEx.
la source
Performance-Wise, ce n'est probablement pas la meilleure solution, mais cela fonctionne.
la source
la source