2011-04-19 3 views
6

Hé les gars, j'ai des chaînes comme celui-ciSupprimer les espaces dans les cordes

"This_ ___is_a_ _string."

, et je veux transformer tous les espaces multiples en un seul. Y a-t-il des fonctions en C# qui peuvent faire cela?

Merci

Répondre

11
var s = "This is a  string with multiple white space"; 

Regex.Replace(s, @"\s+", " "); // "This is a string with multiple white space" 
5
Regex r = new Regex(@"\s+"); 
string stripped = r.Replace("Too many spaces", " "); 
2

Les exemples regex sur cette page sont probablement bien mais voici une solution sans regex:

string myString = "This is a string."; 
string myNewString = ""; 
char previousChar = ' '; 
foreach(char c in myString) 
{ 
    if (!(previousChar == ' ' && c == ' ')) 
    myNewString += c; 
    previousChar = c; 
} 
+1

Vous devriez vraiment essayer d'éviter la concaténation de chaînes multiples ... –

+0

D'accord @ David, il y a optimalisations à faire, mais en utilisant un 'StringBuilder', ou similaires, aurait fait mon exemple plus difficile à comprendre. Donner 'myNewString' et' previousChar' une valeur initiale n'est pas non plus optimisé, mais j'essaie simplement de faire une suggestion sur la façon d'aborder le problème sans regex. N'hésitez pas à le rendre "parfait" :) – Bazzz

3

Voici une belle façon sans regex. Avec Linq.

var astring = "This   is  a  string with  to  many spaces."; 
astring = string.Join(" ", astring.Split(' ').Where(m => m != string.Empty)); 

sortie "This is a string with to many spaces"

+2

Vous pouvez également utiliser StringSplitOptions.RemoveEmptyEntries sur l'appel astring.Split() pour supprimer votre filtre Where. – ahawker

Questions connexes