Usuwanie powrotu karetki i nowego wiersza z końca ciągu w języku C #

Odpowiedzi:

198

Spowoduje to obcięcie dowolnej kombinacji powrotu karetki i nowej linii z końca s:

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

Edycja : Lub, jak uprzejmie wskazuje JP, możesz to bardziej zwięźle przeliterować jako:

s = s.TrimEnd('\r', '\n');
RichieHindle
źródło
10
Zwróć uwagę na słowo kluczowe params w deklaracji TrimEnd, pozwala ono przekazać wiele wystąpień znaku zamiast tablicy. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto
3
Co powiesz na to: s = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
Ε Г И І И О
4
Piszę C # od czasu pojawienia się wersji 1.0 (10 lat temu). Teraz opowiedz mi o TrimEnd. No!
s15199d
7
Tylko z ciekawości, wszystko, czego naprawdę potrzebujesz, to s = s.TrimEnd()- jak mówią dokumenty: Jeśli trimChars ma wartość null lub pustą tablicę, zamiast tego usuwane są białe znaki Unicode. - patrz String.TrimEnd
Stuart Wood
@StuartWood: ... o co nie prosił Avik. Poprosił konkretnie o '\r'i '\n'nic więcej, ' 'na przykład nie znak spacji .
RichieHindle,
31

To powinno działać ...

var tst = "12345\n\n\r\n\r\r";
var res = tst.TrimEnd( '\r', '\n' );
JP Alioto
źródło
19

Jeśli korzystasz z wielu platform, bezpieczniej jest używać tej metody.

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

Uwzględnia różne znaki nowej linii i powrotu karetki.

Alex Wiese
źródło
Metoda JP - tst.TrimEnd( '\r', '\n' )- jest w praktyce dość „bezpieczna”, ponieważ główne EOL to [obecnie] tylko różne kombinacje \ri \n, ale alexw jest „właściwą” odpowiedzią. Niech CLR powie ci, jakie znaki są w nowej linii tej platformy. EOL nie zawsze był kombinacją 0D i 0As
ruffin
Kiedyś używałem, Environment.NewLineale wydawało się, że nie obsługuje przypadków, w których \rbył obecny bez \n. TrimEnd('r','\n')wydaje się być bardziej wiarygodny w tym przypadku.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
2
Może się zdarzyć, że jest to w rzeczywistości problem międzyplatformowy i dec musi konkretnie usunąć oba \ r \ n, niezależnie od tego, co mówi środowisko systemowe.
Andrew Hill
13
String temp = s.Replace("\r\n","").Trim();

sbędący oryginalnym ciągiem. (Uwaga wielkie litery)

Wypadek893
źródło
11
Spowoduje to również: 1) usunięcie \ r \ n ze środka ciągu, 2) usunięcie wszelkich białych znaków z początku ciągu oraz 3) usunięcie wszelkich białych znaków z końca ciągu.
RichieHindle
To prawda, na końcu założyłem tylko jedno / r / n. Nie wspomniano o tym w oryginalnym poście. Nie jestem pewien, czy zapewnia -1 głos
Crash893
Dokładnie to, czego szukałem. Dzięki.
NotMe
4
Korzysta replace()wtedy trim()nie przesada, kiedy TrimEnd()mogą zrobić same zadania, albo ja czegoś brakuje?
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
świetna sugestia @MattBaker
Crash893
8
s.TrimEnd();

Powyższe jest wszystkim, czego potrzebowałem, aby usunąć „\ r \ n” z końca mojego ciągu.

Głosowana odpowiedź wydaje mi się błędna. Po pierwsze, to nie działa, gdy próbowałem, po drugie, jeśli to nie działa Spodziewam się, że s.TrimEnd ( „\ r”, „\ n”) by usunąć tylko albo do „\ r” lub „\ n” , więc musiałbym dwukrotnie przejechać przez mój ciąg - raz, gdy „\ n” był na końcu, a drugi raz, gdy „\ r” był na końcu (teraz, gdy „\ n” zostało usunięte) .

martinp999
źródło
4

Jeśli zawsze występuje jeden CRLF, to:

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

Jeśli może, ale nie musi, to:

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

Oba (zgodnie z projektem) usuwają co najwyżej jeden CRLF. Buforuj wyrażenie regularne w celu zwiększenia wydajności.

Matthew Flaschen
źródło
4

Dla nas VBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})
Szymon
źródło
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
źródło
3

To było zbyt proste - dla mnie odfiltrowuję określone elementy wiadomości e-mail. Piszę własny niestandardowy filtr niechcianych wiadomości e-mail. Z \ r i / lub \ n w ciągu znaków, zamiast filtrowania, wymazywał on wszystkie elementy.

Właśnie zrobiłem filter = filter.Remove ('\ n') i filter = filter.Remove ('\ r'). Tworzę filtr w taki sposób, aby użytkownik końcowy mógł używać Notatnika do bezpośredniej edycji pliku, więc nie wiadomo, gdzie te znaki mogą się osadzić - może być inne niż na początku lub na końcu ciągu. Więc usunięcie ich wszystkich robi to.

Pozostałe wpisy działają, ale Usuń może być najłatwiejszy?

Dowiedziałem się trochę więcej o Regex z tego postu - całkiem fajna praca z jego użyciem tutaj.

user1585204
źródło
Wygląda na to, że mógłbyś to zrobićfilter = filter.Remove('\n').Remove('\r');
John Saunders
2

Używam dużo poziomu wymazywania

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

a teraz mamy czysty jeden rząd

matasoy
źródło
0
varName.replace(/[\r\n]/mg, '')                                              
Poklepać
źródło
0

To jest to, co mam do pracy.

s.Replace("\r","").Replace("\n","")
Jordan Mahsman
źródło