Entfernen von Wagenrücklauf und Zeilenumbruch vom Ende einer Zeichenfolge in c #

113

Wie entferne ich das Wagenrücklaufzeichen (\r)und das neue Zeilenzeichen (\n)vom Ende einer Zeichenfolge?

Avik
quelle

Antworten:

198

Dadurch wird jede Kombination von Wagenrückläufen und Zeilenumbrüchen ab dem Ende von s:

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

Bearbeiten : Oder wie JP freundlich hervorhebt, können Sie dies prägnanter buchstabieren als:

s = s.TrimEnd('\r', '\n');
RichieHindle
quelle
10
Beachten Sie das Schlüsselwort params in der Deklaration von TrimEnd. Damit können Sie mehrere Instanzen eines Zeichens anstelle des Arrays übergeben. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto
3
Wie wäre es damit: s = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
Г И І І
4
Ich habe c # geschrieben, seit v1.0 herauskam (vor 10 Jahren). Jetzt erzählst du mir von TrimEnd. Doh!
s15199d
7
Aus Interesse brauchen Sie nur s = s.TrimEnd()- wie in den Dokumenten angegeben: Wenn trimChars null oder ein leeres Array ist, werden stattdessen Unicode-Leerzeichen entfernt. - siehe String.TrimEnd
Stuart Wood
@StuartWood: ... was Avik nicht verlangt hat. Er fragte speziell nach '\r'und '\n'und nichts anderem, ' 'zum Beispiel nicht nach dem Leerzeichen .
RichieHindle
31

Das sollte funktionieren ...

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

Wenn Sie mehrere Plattformen verwenden, sind Sie mit dieser Methode sicherer.

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

Es werden verschiedene Zeilenumbruch- und Wagenrücklaufzeichen berücksichtigt.

Alex Wiese
quelle
Die Methode von JP - tst.TrimEnd( '\r', '\n' )- ist in der Praxis ziemlich "sicher", da große EOLs [derzeit] nur verschiedene Kombinationen von \rund sind \n, aber die von alexw ist die "richtige" Antwort. Lassen Sie sich von der CLR mitteilen, welche Zeichen in der Newline dieser Plattform enthalten sind. EOL hat nicht immer Kombinationen von 0DS gewesen und 0AS
ruffin
Früher habe ich verwendet, Environment.NewLineaber es schien nicht mit Fällen umzugehen, in denen \res ohne vorhanden war \n. TrimEnd('r','\n')scheint in diesem Fall zuverlässiger zu sein.
28 ʙᴀᴋᴇʀ
2
Es kann sein, dass dies tatsächlich ein plattformübergreifendes Problem ist und dec beide \ r \ n speziell entfernen muss, unabhängig davon, was die Systemumgebung sagt.
Andrew Hill
12
String temp = s.replace("\r\n","").trim();

s ist die ursprüngliche Zeichenfolge.

Crash893
quelle
11
Dies führt auch dazu, dass: 1) \ r \ n aus der Mitte der Zeichenfolge entfernt wird, 2) Leerzeichen am Anfang der Zeichenfolge entfernt werden und 3) Leerzeichen am Ende der Zeichenfolge entfernt werden.
RichieHindle
Es stimmt, ich habe am Ende nur ein / r / n angenommen. Es wurde im Originalbeitrag nicht erwähnt. Ich bin nicht sicher, ob dies eine -1 Stimme
rechtfertigt
Genau das, wonach ich gesucht habe. Vielen Dank.
NotMe
4
Ist die Verwendung replace()dann trim()nicht übertrieben, wenn TrimEnd()die Arbeit alleine erledigt werden kann, oder fehlt mir etwas?
28 ʙᴀᴋᴇʀ
toller Vorschlag @MattBaker
Crash893
8
s.TrimEnd();

Das Obige ist alles, was ich brauche, um '\ r \ n' vom Ende meiner Zeichenfolge zu entfernen.

Die positive Antwort scheint mir falsch. Erstens hat es nicht funktioniert, als ich es versucht habe, zweitens, wenn es funktioniert hat, würde ich erwarten, dass s.TrimEnd ('\ r', '\ n') nur entweder ein '\ r' oder ein '\ n' entfernen würde. , also müsste ich es zweimal über meine Zeichenfolge laufen lassen - einmal, wenn '\ n' am Ende war und das zweite Mal, wenn '\ r' am Ende war (jetzt, wo das '\ n' entfernt wurde) .

martinp999
quelle
4

Wenn es immer eine einzelne CRLF gibt, dann:

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

Wenn es es haben kann oder nicht, dann:

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

Beide (von Entwurf) entfernen höchstens eine einzelne CRLF. Zwischenspeichern Sie den regulären Ausdruck für die Leistung.

Matthew Flaschen
quelle
4

Für uns VBer:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})
Simon
quelle
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+", " ");
vnRock
quelle
3

Das war zu einfach - für mich filtere ich bestimmte E-Mail-Elemente heraus. Ich schreibe meinen eigenen E-Mail-Junk-Filter. Mit \ r und / oder \ n in der Zeichenfolge wurden alle Elemente gelöscht, anstatt zu filtern.

Also habe ich gerade filter = filter.Remove ('\ n') und filter = filter.Remove ('\ r') gemacht. Ich mache meinen Filter so, dass ein Endbenutzer die Datei mit Notepad direkt bearbeiten kann, sodass nicht abzusehen ist, wo sich diese Zeichen möglicherweise selbst einbetten - möglicherweise nicht am Anfang oder Ende der Zeichenfolge. Das Entfernen aller macht es also.

Die anderen Einträge funktionieren alle, aber Entfernen könnte am einfachsten sein?

Ich habe in diesem Beitrag einiges mehr über Regex gelernt - ziemlich coole Arbeit mit seiner Verwendung hier.

user1585204
quelle
Sieht so aus, als könnten Sie es einfach tunfilter = filter.Remove('\n').Remove('\r');
John Saunders
2

Ich benutze viel Löschstufe

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, "");

und jetzt haben wir eine saubere eine Reihe

Matasoy
quelle
0
varName.replace(/[\r\n]/mg, '')                                              
Klopfen
quelle
0

Das muss ich für mich arbeiten.

s.Replace("\r","").Replace("\n","")
Jordan Mahsman
quelle