Odpowiedzi:
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');
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
'\r'
i '\n'
nic więcej, ' '
na przykład nie znak spacji .
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.
tst.TrimEnd( '\r', '\n' )
- jest w praktyce dość „bezpieczna”, ponieważ główne EOL to [obecnie] tylko różne kombinacje \r
i \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
Environment.NewLine
ale wydawało się, że nie obsługuje przypadków, w których \r
był obecny bez \n
. TrimEnd('r','\n')
wydaje się być bardziej wiarygodny w tym przypadku.
String temp = s.Replace("\r\n","").Trim();
s
będący oryginalnym ciągiem. (Uwaga wielkie litery)
replace()
wtedy trim()
nie przesada, kiedy TrimEnd()
mogą zrobić same zadania, albo ja czegoś brakuje?
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) .
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.
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.
filter = filter.Remove('\n').Remove('\r');
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
To jest to, co mam do pracy.
s.Replace("\r","").Replace("\n","")