Как удалить пустые строки из форматированной строки?

Как удалить пустые строки в строке в С#? Я генерирую некоторые текстовые файлы в С# (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)

Ответ 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();
}