Как удалить пустые строки из форматированной строки?
Как удалить пустые строки в строке в С#? Я генерирую некоторые текстовые файлы в С# (winforms), и по некоторым причинам есть несколько пустых строк. Как я могу удалить их после создания строки (используя StringBuilder и TextWrite).
Пример текстового файла:
THIS IS A LINE
THIS IS ANOTHER LINE AFTER SOME EMPTY LINES!
Спасибо.
Ответы
Ответ 1
Если вы также хотите удалить строки, содержащие только пробелы, используйте
resultString = Regex.Replace(subjectString, @"^\s+$[\r\n]*", string.Empty, RegexOptions.Multiline);
^\s+$
удалит все от первой пустой строки до последней (в непрерывном блоке пустых строк), включая строки, содержащие только символы табуляции или пробелы.
[\r\n]*
затем удалит последний CRLF (или просто LF, что важно, потому что механизм регулярных выражений .NET сопоставляет $
между a \r
и a \n
, как ни странно).
Ответ 2
@Tim Pietzcker - Не работает для меня. Я должен немного измениться, но спасибо!
Эххх С# Regex.. Я должен был изменить это снова, но это работает хорошо:
private string RemoveEmptyLines(string lines)
{
return Regex.Replace(lines, @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline).TrimEnd();
}
Пример: http://regex101.com/r/vE5mP1/2
Ответ 3
Вы можете попробовать String.Replace("\n\n", "\n");
Ответ 4
Попробуйте это
Regex.Replace(subjectString, @"^\r?\n?$", "", RegexOptions.Multiline);
Ответ 5
private string remove_space(string st)
{
String final = "";
char[] b = new char[] { '\r', '\n' };
String[] lines = st.Split(b, StringSplitOptions.RemoveEmptyEntries);
foreach (String s in lines)
{
if (!String.IsNullOrWhiteSpace(s))
{
final += s;
final += Environment.NewLine;
}
}
return final;
}
Ответ 6
Если вы также хотите удалить строки, содержащие только пробелы, используйте
resultString = Regex.Replace(subjectString, @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
^\s+$
удалит все из первой пустой строки до последней (в непрерывном блоке пустых строк), включая строки, содержащие только табуляции или пробелы.
[\r\n]*
затем удалит последний CRLF (или просто LF, что важно, потому что механизм регулярных выражений .NET соответствует $между a\r и a\n, как ни странно).
Ответ 7
Если вы похожи на меня, и ни одна из вышеперечисленных строк не сработала для вас, то я искал функцию, которая может сообщить вам, является ли строка пустой (и если это так, вы можете уничтожить или удалить ее, как я)
// if string "myText" is empty then
if (string.IsNullOrEmpty("myText")){
//delete/disable string
}
Ответ 8
На основе кода Евгения Соболева я написал этот метод расширения, который также обрезает последний (устаревший) разрыв строки, используя TrimEnd (TrimNewLineChars)
public static class StringExtensions
{
private static readonly char[] TrimNewLineChars = Environment.NewLine.ToCharArray();
public static string RemoveEmptyLines(this string str)
{
if (str == null)
{
return null;
}
var lines = str.Split(TrimNewLineChars, StringSplitOptions.RemoveEmptyEntries);
var stringBuilder = new StringBuilder(str.Length);
foreach (var line in lines)
{
stringBuilder.AppendLine(line);
}
return stringBuilder.ToString().TrimEnd(TrimNewLineChars);
}
}
Ответ 9
Этот шаблон отлично подходит для удаления пустых строк и строк только с пробелами и/или вкладками.
s = Regex.Replace(s, "^\s*(\r\n|\Z)", "", RegexOptions.Multiline)
Ответ 10
Я нашел простой ответ на эту проблему
YourradTextBox.Lines = YourradTextBox.Lines.Where(p => p.Length > 0).ToArray();
Адаптировано из Марко Минервы [MCPD] по адресу: https://social.msdn.microsoft.com/Forums/windows/en-US/b1bb4107-4ad5-4cd3-bd20-9c2b3f9b31a6/delete-lines-from-multiline-textbox-if -ITS-содержат-определенную-строку-C? Форум = WinForms и проф = требуемая
Ответ 11
private static string RemoveEmptyLines(string text)
{
var lines = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
var sb = new StringBuilder(text.Length);
foreach (var line in lines)
{
sb.AppendLine(line);
}
return sb.ToString();
}