Видалення повернення каретки та нового рядка з кінця рядка в c #


Відповіді:


198

Це знизить будь-яку комбінацію повернення перевезення та нових рядків з кінця s:

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

Редагувати : Або, як люб'язно вказує JP, ви можете написати це більш коротко, як:

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

10
Зверніть увагу на ключове слово params в декларації TrimEnd, воно дозволить вам передати кілька екземплярів символу замість масиву. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP

3
Як щодо цього: s = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
Ε Г І І І О

4
Я пишу c # з моменту виходу v1.0 (10 років тому). Тепер ти розкажи мені про TrimEnd. До!
s15199d

7
Просто вам нецікаво, що вам дійсно потрібно s = s.TrimEnd()- як говорять документи: Якщо trimChars є нульовим або порожнім масивом, замість нього видаляються символи пробілу Unicode. - див. String.TrimEnd
Stuart Wood

@StuartWood: ... чого Авік не просив. Він запитав спеціально для, '\r'і '\n'нічого іншого, ' 'наприклад, символу пробілу .
RichieHindle

31

Це має працювати ...

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

19

Якщо ви використовуєте кілька платформ, ви безпечніше використовувати цей метод.

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

Він буде враховувати різні символи нового рядка та повернення каретки.


Метод JP - tst.TrimEnd( '\r', '\n' )- є на практиці "безпечним" на практиці, оскільки основні EOL є [на даний момент] просто різними комбінаціями \rта \n, але alexw - це "правильна" відповідь. Нехай CLR розповість, які символи є в новому рядку цієї платформи. EOL не завжди був комбо з 0D та 0As
ruffin

Раніше я використовував, Environment.NewLineале, здавалося, не обробляв випадки, коли це \rбуло без \n. TrimEnd('r','\n')здається, в цьому випадку надійніше.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

2
Можливо, це насправді проблематика між платформами, і dec потрібно спеціально видалити обидва \ r \ n, незалежно від того, що говорить системне середовище.
Ендрю Хілл

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

sбудучи початковим рядком. (Зверніть увагу на великі літери)


11
Це також: 1) Видаліть \ r \ n із середини рядка; 2) Видаліть будь-які символи пробілу з початку рядка та 3) видаліть будь-які символи пробілу з кінця рядка.
RichieHindle

Щоправда, я припускав лише один / r / n наприкінці. Це не згадувалося в початковому пості. Я не впевнений, що воїни -1 голос
Crash893

Саме те, що я шукав. Дякую.
NotMe

4
Чи використання replace()цього trim()не є зайвим, коли я TrimEnd()можу виконати роботу поодинці, чи я щось пропускаю?
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

чудова пропозиція @MattBaker
Crash893

8
s.TrimEnd();

Наведене вище - все, що мені було потрібно, щоб видалити "\ r \ n" з кінця моєї рядка.

Обґрунтована відповідь мені здається неправильною. По-перше, це не спрацювало, коли я спробував, по-друге, якби це спрацювало, я б очікував, що s.TrimEnd ('\ r', '\ n') видалить або a \ \ r ', або a \ \ n' , тож мені доведеться двічі пропустити її над моєю рядком - один раз, коли '\ n' було в кінці, і другий раз, коли '\ r' було в кінці (тепер, коли '\ n' було видалено) .


4

Якщо завжди є одна CRLF, тоді:

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

Якщо він може мати, а може і не мати його, то:

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

Обидва ці (за задумом) знімуть не більше одного CRLF. Кешуйте регекс для продуктивності.



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

Це було занадто просто - для мене я фільтрую певні елементи електронної пошти. Я пишу власний нестандартний фільтр електронної пошти. З \ r та / або \ n у рядку було витирання всіх елементів замість фільтрування.

Отже, я просто зробив filter = filter.Remove ('\ n') та filter = filter.Remove ('\ r'). Я роблю свій фільтр таким, щоб кінцевий користувач міг використовувати Блокнот для прямого редагування файлу, щоб не було сказано, куди ці символи можуть вбудовуватися - це може бути інакше, ніж на початку чи в кінці рядка. Тож видалення їх усіх робить.

Усі інші записи, окрім видалення, можуть бути найпростішими?

Я дізнався трохи більше про Regex з цієї посади - досить класна робота з її використанням тут.


Схоже, ви могли зробити це простоfilter = filter.Remove('\n').Remove('\r');
Джон Сондерс

2

Я використовую багато рівня стирання

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

і тепер у нас є чистий один ряд



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.