2012-04-09 25 views
10

Eventuali duplicati:
How do I replace multiple spaces with a single space in C#?come tagliare "a b c" in "a b c"

Qual è il modo più elegante come tagliare gli spazi bianchi nelle stringhe come " a<many spaces>b c " in "a b c". Quindi, lo spazio bianco ripetuto viene ridotto in uno spazio.

+0

@naveen, la domanda a cui si collega non gestisce lo spazio intorno alla stringa. – Lucero

+4

@Lucero: c'è sempre '.Trim()' per quello. :) – naveen

+1

@naveen, il punto è che è diverso. Se si sa come usare una regex e tagliare, allora la domanda non sarebbe nemmeno necessaria. – Lucero

risposta

12

si potrebbe usare Regex per questo:

Regex.Replace(my_string, @"\s+", " ").Trim(); 
+0

-1: non ti libererai dello spazio attorno allo spago. – leppie

+2

Ok, quindi, perché dovresti dare -1 la risposta è ok ... può essere facilmente aggiustata ... non ha senso –

+1

@TomaCristian: Perché ci sono state diverse altre risposte corrette. Sciocco come tutti vanno e modificano il loro ... Abbastanza zoppo IMO. Basta cancellarlo se hai sbagliato la prima volta. – leppie

14

Una soluzione w/o regex, solo per avere sul tavolo:

char[] delimiters = new char[] { ' '}; // or null for 'all whitespace' 
string[] parts = txt.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); 
string result = String.Join(" ", parts); 
+1

A differenza delle soluzioni regex che utilizzano '\ s', verranno rimossi solo i caratteri spazio (U + 0020), non altri caratteri classificati come spazi bianchi. Ciò soddisfa il criterio di Q, ma in pratica mi aspetterei che tale esigenza si applichi anche alle schede ecc. – Richard

+1

@Richard: l'OP può perfezionare quello con i delimitatori var. E usando 'delimiters = null' corrisponde a' \ s' –

+1

Mi chiedo sempre (come in questa domanda qui) perché le operazioni di stringa complesse, relativamente costose, siano preferite da molte espressioni regolari troppo concise. Il mio motto è usare gli strumenti giusti per il lavoro da svolgere, e regex è stato lo strumento progettato esattamente per la "semplice" corrispondenza del modello delle espressioni regolari di testo.(Henk, non fraintendermi, non sto affatto criticando la tua risposta, ma non capisco l'avversione di molti per imparare le espressioni regolari e usarle dove sono "a casa" - nota che io d non creare neanche un parser completo o un validatore di numeri con regex, hanno i loro limiti chiari.) – Lucero

0
Regex.Replace(str, "[\s]+"," ") 

quindi chiamare Trim per sbarazzarsi di spazio bianco in testa e in coda.

8
Regex.Replace(my_string, @"^\s+|\s+$|(\s)\s+", "$1"); 
+4

+1 Mi piace. Ma mi chiedo quanti dei miei giovani programmatori lo capiranno. :) – naveen

+1

Conoscere alcune nozioni di base sulle espressioni regolari è un'importante competenza IMHO, specialmente dal momento che è anche nel set di strumenti dello sviluppatore web lato client (dove molti junior faranno cose). Quindi, se non lo capiscono, devono solo cercarlo ... non è troppo complesso per essere sezionato da un inesperto IMHO newbie. – Lucero

+0

Certo, può essere capito, ma ci vuole un po 'di tempo per analizzare mentalmente, anche con la conoscenza regex. La regex nella versione con '.Trim()' è molto più concisa, è più facile da mantenere. (Non sto facendo downvoting, però - questa versione _può essere preferita in alcune situazioni, come un ciclo stretto, se è davvero più veloce) – Izkata

0

uso regex

String test = " a b c "; 
test = Regex.Replace(test,@"\s{2,}"," "); 
test = test.Trim(); 

questo codice sostituisce eventuali 2 o più spazi con uno spazio usando Regex quindi rimuovere all'inizio e la fine.

+0

L'espressione regolare in realtà sostituisce esattamente due spazi bianchi con uno solo. Dovrebbe essere '\ s {2,}' o '\ s \ s +' o anche '\ s +' se vuoi sostituire un numero qualsiasi di spazi bianchi con uno spazio (nota che poiché' \ s' corrisponde a tutti gli spazi bianchi inclusi i caratteri come schede il risultato sarà diverso). – Lucero

+0

@Lucero hai ragione, ma funzionerà perché selezionerà ogni 2 spazi come un gruppo, quindi se abbiamo 4 spazi bianchi vuol dire che dobbiamo sostituire i gruppi –

+0

La correzione ora funziona, ma prima sarebbero stati 2 i gruppi sostituito in due spazi nell'output (l'output non viene rielaborato come input). – Lucero

4

Utilizzare il metodo Trim per rimuovere spazi bianchi all'inizio e alla fine della stringa, e un'espressione regolare per ridurre gli spazi multipli:

s = Regex.Replace(s.Trim(), @"\s{2,}", " "); 
0

usare un'espressione regolare:

"(){2,}" //Matches any sequence of spaces, with at least 2 of them 

e usalo per sostituire tutte le corrispondenze con "".

Non l'ho fatto in C# e ho bisogno di più tempo per capire cosa dice la documentazione, quindi dovrai trovarlo da solo .. mi dispiace.

0
 Regex rgx = new Regex("\\s+"); 
     string str; 
     str=Console.ReadLine(); 
     str=rgx.Replace(str," "); 
     str = str.Trim(); 
     Console.WriteLine(str); 
Problemi correlati