2011-04-19 34 views

Respuesta

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

Los ejemplos de expresiones regulares en esta página son probablemente bueno, pero aquí es una solución sin expresiones regulares:

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

Usted realmente debe tratar de evitar la concatenación de cadenas múltiples ... –

+0

@ David De acuerdo, hay optimalisations de hacer, pero usando una 'StringBuilder', o similar, habría hecho mi ejemplo más difícil de entender Darle a 'myNewString' y' previousChar' un valor inicial tampoco está optimizado, pero simplemente estoy tratando de hacer una sugerencia sobre cómo abordar el problema sin regex. Siéntase libre de hacerlo "perfecto" :) – Bazzz

3

Aquí está una manera agradable y sin expresiones regulares. Con Linq.

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

salida "This is a string with to many spaces"

+2

También puede usar StringSplitOptions.RemoveEmptyEntries en la llamada astring.Split() para eliminar su filtro Where. – ahawker

Cuestiones relacionadas