web-dev-qa-db-de.com

Wie entferne ich leere Zeilen aus einer formatierten Zeichenfolge?

Wie entferne ich leere Zeilen in einem String in C #? Ich generiere einige Textdateien in C # (Winforms) und aus irgendeinem Grund gibt es einige leere Zeilen. Wie kann ich sie entfernen, nachdem der String generiert wurde (mit StringBuilder und TextWrite )?.

Beispieltextdatei: 

THIS IS A LINE



THIS IS ANOTHER LINE AFTER SOME EMPTY LINES!

Vielen Dank.

28
Saeid Yazdani

Wenn Sie auch Zeilen entfernen möchten, die nur Leerzeichen enthalten, verwenden Sie

resultString = Regex.Replace(subjectString, @"^\s+$[\r\n]*", string.Empty, RegexOptions.Multiline);

^\s+$ entfernt alles von der ersten bis zur letzten leeren Zeile (in einem zusammenhängenden Block leerer Zeilen), einschließlich Zeilen, die nur Tabulatoren oder Leerzeichen enthalten. 

[\r\n]* entfernt dann die letzte CRLF (oder nur LF), was wichtig ist, weil die .NET-Regex-Engine mit dem $ zwischen einem \r und einem \n übereinstimmt, und das lustig ist. 

72
Tim Pietzcker

@ Tim Pietzcker - Funktioniert nicht für mich. Ich muss ein bisschen ändern, aber thx!
Ehhh C # Regex .. Ich musste es noch einmal ändern, aber das funktioniert gut:

private string RemoveEmptyLines(string lines)
{
  return Regex.Replace(lines, @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline).TrimEnd();
}

Beispiel: http://regex101.com/r/vE5mP1/2

11
oobe

Sie könnten String.Replace("\n\n", "\n"); versuchen

7
user807566

Versuche dies 

Regex.Replace(subjectString, @"^\r?\n?$", "", RegexOptions.Multiline);
3
Narendra Yadala
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();
}
0
Evgeny Sobolev

Basierend auf Evgeny Sobolevs Code habe ich diese Erweiterungsmethode geschrieben, die auch den letzten (veralteten) Zeilenumbruch mit TrimEnd (TrimNewLineChars) abschneidet.

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);
    }
}
0
thomasgalliker
    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;

    }
0
keval choudhary

Wenn Sie wie ich sind und keine der oben genannten Zeilen für Sie funktioniert hat, habe ich nach einer Funktion gesucht, die Ihnen mitteilt, ob eine Zeichenfolge leer ist (und wenn ja, können Sie sie zerstören oder löschen, wie ich es tat).

// if string "myText" is empty then
if (string.IsNullOrEmpty("myText")){
//delete/disable string
}
0
dam corn