Какой самый быстрый способ удаления нескольких пустых строк? - PullRequest
0 голосов
/ 08 ноября 2011

Я получаю строковое сообщение через событие и помещаю его в TextBox. К сожалению, в этом сообщении много пустых строк. Как заменить две пустые строки одной?

Моя первая мысль о чем-то вроде этого:

string newLine = Environment.NewLine;
textbox.text = msg.Replace(newLine + newLine, newLine);

Я уверен, что есть лучший способ сделать это.

Ответы [ 6 ]

5 голосов
/ 08 ноября 2011

Как насчет использования string.Split() с опцией RemoveEmptyEntries:

message = string.Join(Environment.NewLine, message.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));

Это также охватывало бы более двух новых строк подряд, а не только две.

5 голосов
/ 08 ноября 2011

Вы можете использовать RegEx.Replace.

На самом деле, статья MSDN об этой функции показывает, как избавиться от слишком большого количества пустого пространства, очень близко к тому, что вы хотите сделать:

http://msdn.microsoft.com/en-us/library/xwewhkd1.aspx

Для ваших целей, вместо того, чтобы искать пробелы:

"\\s+";

Вы хотите искать новые строки:

"\\n+";
3 голосов
/ 08 ноября 2011

Но ваше решение String.Replace не будет работать, если в строке три новых строки.Например, рассмотрим:

string s = "hello\n\n\n\n\n\n\n\n\n\n\n\nworld";
string s1 = s.Replace("\n\n", "\n");
string s2 = Regex.Replace(s, "\\n{2,}", "\n");

s1 будет содержать несколько символов \n.s2 будет иметь только один.

Это пример использования \n, но то же самое применимо, если вы используете Environment.NewLine (то есть \r\n).

2 голосов
/ 08 ноября 2011

textbox.text = Regex.Replace(inputText, @"(" + Environment.NewLine + ")+", Environment.NewLine); должен сделать трюк

1 голос
/ 08 ноября 2011

Вы можете использовать регулярное выражение, но тогда у вас есть две проблемы.Ваш код проще - используйте String.Replace.

0 голосов
/ 08 ноября 2011

Это предполагает две вещи.

1) Символ новой строки, который вы пытаетесь заменить, является символом новой строки Windows и произносит символ новой строки Unix.

2) То, что вы хотите заменить только в тех случаях, когда происходит "newline + newline", а не "newline + newline + newline", что тогда будет как "newline + newline". Помните, что String.Replace создает новую строку.

Другими словами, ваша идея ошибочна.

Предлагаю прочитать это: http://www.dotnetperls.com/remove-whitespace

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...