Rimozione del ritorno a capo e della nuova riga dalla fine di una stringa in c #


113

Come rimuovo il carattere di ritorno a capo (\r)e il nuovo carattere di riga (\n)dalla fine di una stringa?

Risposte:


198

Questo taglierà qualsiasi combinazione di ritorni a capo e di nuova riga dalla fine di s:

s = s.TrimEnd(new char[] { '\r', '\n' });

Modifica : o come fa notare gentilmente JP, puoi scriverlo in modo più succinto come:

s = s.TrimEnd('\r', '\n');

10
Prendi nota della parola chiave params nella dichiarazione di TrimEnd, ti consente di passare più istanze di un carattere invece dell'array. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto

3
Che ne dici di questo: s = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
Г Г И І И О

4
Ho scritto c # da quando è uscita la v1.0 (10 anni fa). Ora parlami di TrimEnd. Doh!
s15199d

7
Solo per interesse, tutto ciò di cui hai veramente bisogno è s = s.TrimEnd(), come dicono i documenti: se trimChars è null o un array vuoto, i caratteri di spazio vuoto Unicode vengono invece rimossi. - vedi String.TrimEnd
Stuart Wood

@StuartWood: ... che non è quello che ha chiesto Avik. Ha chiesto specificamente per '\r'e '\n'e nient'altro, non il carattere di spazio ' ', per esempio.
RichieHindle

31

Questo dovrebbe funzionare ...

var tst = "12345\n\n\r\n\r\r";
var res = tst.TrimEnd( '\r', '\n' );

19

Se utilizzi più piattaforme, sei più sicuro utilizzando questo metodo.

value.TrimEnd(System.Environment.NewLine.ToCharArray());

Considererà diversi caratteri di ritorno a capo e ritorno a capo.


Il metodo di JP - tst.TrimEnd( '\r', '\n' )- è ragionevolmente "sicuro" in pratica poiché i principali EOL sono [attualmente] solo diverse combo di \re \n, ma quella di alexw è la risposta "giusta". Lascia che il CLR ti dica cosa sono i caratteri nella nuova riga di questa piattaforma. EOL non è sempre stata una combinazione di 0D e 0A
ruffin

Lo usavo Environment.NewLinema non sembrava gestire i casi in cui \rera presente senza \n. TrimEnd('r','\n')sembra essere più affidabile in questo caso.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

2
Potrebbe essere che si tratti di un problema multipiattaforma e dec deve rimuovere specificamente entrambi \ r \ n, indipendentemente da ciò che dice l'ambiente di sistema.
Andrew Hill

12
String temp = s.Replace("\r\n","").Trim();

sessendo la stringa originale. (Note maiuscole)


11
Ciò inoltre: 1) rimuoverà \ r \ n dal centro della stringa, 2) rimuoverà tutti i caratteri di spazio vuoto dall'inizio della stringa e 3) rimuoverà tutti i caratteri di spazio dalla fine della stringa.
RichieHindle

È vero, ho assunto solo uno / r / n alla fine. Non è stato menzionato nel messaggio originale. Non sono sicuro che meriti un voto -1
Crash893

Esattamente quello che stavo cercando. Grazie.
NotMe

4
Usare replace()quindi trim()non è eccessivo quando TrimEnd()posso fare il lavoro da solo o mi manca qualcosa?
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

ottimo suggerimento @MattBaker
Crash893

8
s.TrimEnd();

Quanto sopra è tutto ciò di cui avevo bisogno per rimuovere '\ r \ n' dalla fine della mia stringa.

La risposta votata a favore mi sembra sbagliata. In primo luogo, non ha funzionato quando ho provato, in secondo luogo, se non lavoro mi aspetterei che s.TrimEnd ( '\ r', '\ n') eliminerebbe solo sia un '\ r' o un '\ n' , quindi dovrei eseguirlo sulla mia stringa due volte: una per quando "\ n" era alla fine e la seconda volta per quando "\ r" era alla fine (ora che "\ n" è stato rimosso) .


4

Se c'è sempre un singolo CRLF, allora:

myString = myString.Substring(0, myString.Length - 2);

Se può o non può averlo, allora:

Regex re = new Regex("\r\n$");
re.Replace(myString, "");

Entrambi (in base alla progettazione) rimuoveranno al massimo un singolo CRLF. Memorizza nella cache la regex per le prestazioni.


4

Per noi VBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})

3
string k = "This is my\r\nugly string. I want\r\nto change this. Please \r\n help!";
k = System.Text.RegularExpressions.Regex.Replace(k, @"\r\n+", " ");

3

Era troppo facile: per me sto filtrando determinati elementi di posta elettronica. Sto scrivendo il mio filtro per la posta indesiderata personalizzato. Con \ r e / o \ n nella stringa, cancellava tutti gli elementi invece di filtrare.

Quindi, ho appena fatto filter = filter.Remove ('\ n') e filter = filter.Remove ('\ r'). Sto creando il mio filtro in modo tale che un utente finale possa utilizzare il Blocco note per modificare direttamente il file, quindi non è possibile sapere dove questi caratteri potrebbero incorporarsi, potrebbero essere diversi dall'inizio o dalla fine della stringa. Quindi rimuoverli tutti lo fa.

Le altre voci funzionano tutte ma Rimuovi potrebbe essere la più semplice?

Ho imparato un po 'di più su Regex da questo post: un lavoro piuttosto interessante con il suo utilizzo qui.


Sembra che tu possa fare solofilter = filter.Remove('\n').Remove('\r');
John Saunders

2

Uso molti livelli di cancellazione

String donen = "lots of stupid whitespaces and new lines and others..."

//Remove multilines
donen = Regex.Replace(donen, @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
//remove multi whitespaces
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
donen = regex.Replace(donen, " ");
//remove tabs
char tab = '\u0009';
donen = donen.Replace(tab.ToString(), "");
//remove endoffile newlines
donen = donen.TrimEnd('\r', '\n');
//to be sure erase new lines again from another perspective
donen.Replace(Environment.NewLine, "");

e ora abbiamo una riga pulita



0

Questo è quello che devo lavorare per me.

s.Replace("\r","").Replace("\n","")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.