2009-03-16 24 views
70

Come sostituire \n con spazio vuoto?Metodo String.Replace (char, char) in C#

ottengo un errore letterale vuota se faccio questo:

string temp = mystring.Replace('\n', ''); 
+0

Dovrei aggiungere quella stringa temp = mystring.Replace ("\ n", ""); non raggiunge nulla – sarsnake

+6

inoltre, non importa ma invece di "" potresti usare string.Empty. mi fa sentire meglio =) –

risposta

118

String.Replace('\n', '') non funziona perché '' non è un carattere valido letterale.

Se si utilizza l'override String.Replace (stringa, stringa), dovrebbe funzionare.

string temp = mystring.Replace("\n", ""); 
+0

pls leggi i miei appunti. \ n non viene rimosso con questo – sarsnake

+0

Deve, altrimenti manca \ r della nuova riga o non si memorizza correttamente il valore restituito da Sostituisci. – Samuel

+0

@sarsnake probabilmente non riuscirà a notare l'uso di virgolette doppie per l'overload di stringhe. – devlord

4

Questo dovrebbe funzionare.

string temp = mystring.Replace("\n", ""); 

Sei sicuro che ci sono \ n nuove righe nella stringa originale?

0
string temp = mystring.Replace("\n", " "); 
+0

non lo vuole sostituito con uno spazio. volevamo sostituirlo con string.Empty. –

1

Un avvertimento: in .NET il linefeed è "\ r \ n". Quindi, se stai caricando il tuo testo da un file, potresti doverlo usare invece di "\ n"

modifica> come indicato da samuel nei commenti, "\ r \ n" non è specifico di .NET. , ma è specifico per Windows.

+5

-1, "\ r \ n" non è da .NET. Proviene da Windows, usa Environment.NewLine per trovare la sequenza newline per l'ambiente (Windows/Linux/Other). – Samuel

+0

In entrambi i casi, il punto è ancora in piedi. "\ n" non è necessariamente il linefeed. –

+0

E "\ n" non è necessariamente il linefeed. Dal momento che il poster ce l'ha, bisogna dedurre che è il linefeed che stanno cercando. – Samuel

2

Se si utilizza

string temp = mystring.Replace("\r\n", "").Replace("\n", ""); 

quindi non dovrete preoccuparvi di dove la stringa proviene.

+1

Non dovrebbe essere mystring.Replace ("\ r \ n", "") .Replace ("\ n", "")? Se si sostituisce \ n con "", quindi "\ r \ n" diventa "\ r" e "\ r \ n" non corrisponde a nulla. –

1

Che dire di creare un metodo di estensione come questo ....

public static string ReplaceTHAT(this string s) 
{ 
    return s.Replace("\n\r", ""); 
} 

E poi, quando si desidera sostituire che ovunque si vuole si può fare questo.

s.ReplaceTHAT(); 

Con i migliori saluti!

+1

+1 per aumentare la leggibilità e la riusabilità suggerendo il metodo di estensione, ma il nome del metodo potrebbe essere qualcosa di più descrittivo, come ReplaceNewLine() – tie

0

@gnomixa - Cosa intendi nel tuo commento sul non ottenere nulla? Il seguente funziona per me in VS2005.

Se il vostro obiettivo è quello di rimuovere i caratteri di nuova riga, accorciando in tal modo la stringa, guardare a questo:

 string originalStringWithNewline = "12\n345"; // length is 6 
     System.Diagnostics.Debug.Assert(originalStringWithNewline.Length == 6); 
     string newStringWithoutNewline = originalStringWithNewline.Replace("\n", ""); // new length is 5 
     System.Diagnostics.Debug.Assert(newStringWithoutNewline.Length == 5); 

Se il vostro obiettivo è quello di sostituire i caratteri di nuova riga con un carattere di spazio, lasciando la lunghezza della stringa stessa , guardare a questo esempio:

 string originalStringWithNewline = "12\n345"; // length is 6 
     System.Diagnostics.Debug.Assert(originalStringWithNewline.Length == 6); 
     string newStringWithoutNewline = originalStringWithNewline.Replace("\n", " "); // new length is still 6 
     System.Diagnostics.Debug.Assert(newStringWithoutNewline.Length == 6); 

e si deve sostituire le stringhe di un solo carattere invece di personaggi perché '' non è un carattere valido per essere passato per sostituire (string, char)

15

Poiché la sostituzione di "\ n" con "" non ti dà il risultato che desideri, ciò significa che ciò che dovresti sostituire in realtà non è "\ n", ma qualche altra combinazione di caratteri.

Una possibilità è che ciò che è necessario sostituire è la combinazione di caratteri "\ r \ n", che è il codice di nuova riga in un sistema Windows. Se sostituisci solo il carattere "\ n" (avanzamento riga) lascerà il carattere "\ r" (ritorno a capo), che può ancora essere interpretato come un'interruzione di riga, a seconda di come viene visualizzata la stringa.

Se l'origine della stringa è specifica del sistema, è necessario utilizzare quella stringa specifica, altrimenti è necessario utilizzare Environment.NewLine per ottenere la combinazione di caratteri di nuova riga per il sistema corrente.

string temp = mystring.Replace("\r\n", string.Empty); 

o:

string temp = mystring.Replace(Environment.NewLine, string.Empty); 
1

Qui è la vostra risposta esatta ...

const char LineFeed = '\n'; // #10 
string temp = new System.Text.RegularExpressions.Regex(
        LineFeed 
      ).Replace(mystring, string.Empty); 

ma questo è molto meglio ... Specialmente se si sta cercando di dividere le linee (puoi anche usarlo con Split)

const char CarriageReturn = '\r'; // #13 
const char LineFeed = '\n'; // #10 
string temp = new System.Text.RegularExpressions.Regex(
        string.Format("{0}?{1}", CarriageReturn, LineFeed) 
      ).Replace(mystring, string.Empty); 
+1

Qual è il sovraccarico sull'utilizzo di un'espressione regolare per una sostituzione banale? –

+0

sostituisce sia "\ r \ n" che "\ n", quindi entrambe funzionano (doppia sostituzione o superiore) – cilerler

+0

troppe complicazioni inutili e codice aggiuntivo, cilerler. :('string temp = mystring.Replace (" \ n ", string.Empty) .Replace (" \ r ", string.Empty);' è molto più veloce e semplice. –

2

Trovato su Bytes.com:

string temp = mystring.Replace('\n', '\0');// '\0' rappresenta un carattere vuoto

+2

'\ 0' è NULL non vuoto. ..> _> e sì, so che questo è vecchio ma si tratta di informazioni pericolose proprio lì – dten

+0

I seconda e terza confutazione di dten. '\ 0' è un carattere.il nome del personaggio è talvolta chiamato NIL o anche raramente 'carattere vuoto ', ma questo uso di' vuoto 'è fuorviante e confuso per le persone che non conoscono meglio.' \ 0 '= carattere 0, che è un altro personaggio come qualsiasi altro personaggio, ma ogni personaggio ha una funzione. un carattere che puoi trattare come un carattere vuoto, puoi usare '\ 0', a volte lo faccio, ma solo una risposta a una riga che dice che questo è un carattere vuoto è in realtà 'informazioni pericolose' come avvisa spesso. –

+0

null e empty e '\ 0' sono solitamente usati per rappresentare 3 valori diversi che non sono equivalenti (ma sono correlati). null è un valore stringa che è dice "il mio valore è mancante" o "non qui". vuoto significa che il valore esiste, ma non ha caratteri - la sua lunghezza è zero. e '\ 0' non è una stringa. una stringa può avere un carattere che può essere '\ 0' o qualsiasi altro valore di carattere. ma è vero che alcuni chiamano '\ 0' un carattere NIL, un carattere NULL o un carattere vuoto. quindi fai attenzione al codice. in C#, 'null! = string.Empty',' null! = '\ 0'' e 'string.Empty! =' \ 0''. –

0

So che questo è un vecchio post, ma mi piacerebbe aggiungere il mio metodo.

public static string Replace(string text, string[] toReplace, string replaceWith) 
    { 
     foreach (string str in toReplace) 
      text = text.Replace(str, replaceWith); 

     return text; 
    } 

Esempio utilizzo:

string newText = Replace("This is an \r\n \n an example.", new string[] { "\r\n", "\n" }, ""); 
4
string temp = mystring.Replace("\n", string.Empty).Replace("\r", string.Empty); 

Ovviamente, questo rimuove sia '\ n' e '\ r' ed è così semplice come io so come farlo.