Удаление возврата каретки и новой строки из конца строки в с #

Ответы:

198

Это обрежет любую комбинацию возврата каретки и новой строки с конца s:

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

Изменить : Или, как любезно указывает JP, вы можете записать это более сжато как:

s = s.TrimEnd('\r', '\n');
RichieHindle
источник
10
Обратите внимание на ключевое слово params в объявлении TrimEnd, оно позволяет передавать несколько экземпляров символа вместо массива. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto
3
Как насчет этого: s = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
Ε Г И І И О
4
Я пишу на C # с момента выхода версии 1.0 (10 лет назад). А теперь расскажите мне о TrimEnd. Doh!
s15199d
7
Просто из интереса, все, что вам действительно нужно, s = s.TrimEnd()- как говорится в документации: если trimChars имеет значение null или пустой массив, вместо этого удаляются символы пробела Unicode. - см. String.TrimEnd
Стюарт Вуд
@StuartWood: ... это не то, о чем просил Avik. В частности , спросил он для '\r'и '\n'и ничего, а не символ пробела ' ', например.
RichieHindle
31

Это должно работать ...

var tst = "12345\n\n\r\n\r\r";
var res = tst.TrimEnd( '\r', '\n' );
JP Alioto
источник
19

Если вы используете несколько платформ, вам будет безопаснее использовать этот метод.

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

Он будет учитывать разные символы новой строки и возврата каретки.

Алекс Визе
источник
Метод JP - tst.TrimEnd( '\r', '\n' )- достаточно "безопасен" на практике, поскольку основные EOL [в настоящее время] представляют собой просто разные комбинации \rи \n, но alexw - это "правильный" ответ. Позвольте CLR сказать вам, какие символы находятся в новой строке этой платформы. EOL не всегда был комбинацией 0D и
0As
Раньше я использовал, Environment.NewLineно, похоже, он не обрабатывал случаи, когда \rприсутствовал без \n. TrimEnd('r','\n')кажется более надежным в этом случае.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
2
Может случиться так, что на самом деле это проблема кроссплатформенности, и dec необходимо специально удалить оба \ r \ n, независимо от того, что говорит системная среда.
Эндрю Хилл
13
String temp = s.Replace("\r\n","").Trim();

sисходная строка. (Обратите внимание на заглавные буквы)

Crash893
источник
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') удалит только либо '\ r', либо '\ n' , поэтому мне пришлось бы дважды запустить его по моей строке - один раз, когда '\ n' был в конце, и второй раз, когда '\ r' был в конце (теперь, когда '\ n' был удален) .

martinp999
источник
4

Если всегда есть один CRLF, то:

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

Если может, а может и не быть, то:

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

Оба из них (по замыслу) удаляют не более одного CRLF. Кешируйте регулярное выражение для повышения производительности.

Мэтью Флашен
источник
4

Для нас, 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+", " ");
vnRock
источник
3

Это было слишком просто - для меня я отфильтровываю определенные сообщения электронной почты. Я пишу свой собственный фильтр нежелательной почты. С \ r и / или \ n в строке он стирал все элементы вместо фильтрации.

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

Все остальные записи работают, но удалить может быть проще всего?

Я узнал немного больше о Regex из этого поста - довольно крутая работа с его использованием здесь.

user1585204
источник
Похоже, ты мог бы просто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, "");

и теперь у нас есть чистая строка

Матасой
источник
0

Это то, что мне нужно для работы.

s.Replace("\r","").Replace("\n","")
Джордан Махсман
источник