web-dev-qa-db-fra.com

Comment supprimer des lignes vides d'une chaîne formatée?

Comment supprimer des lignes vides dans une chaîne en C #? Je génère des fichiers texte en C # (winforms) et, pour une raison quelconque, des lignes vides. Comment puis-je les supprimer après la génération de la chaîne (à l'aide de StringBuilder et TextWrite ).

Exemple de fichier texte: 

THIS IS A LINE



THIS IS ANOTHER LINE AFTER SOME EMPTY LINES!

Merci.

28
Saeid Yazdani

Si vous souhaitez également supprimer les lignes ne contenant que des espaces, utilisez

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

^\s+$ supprimera tout, de la première à la dernière ligne vide (dans un bloc contigu de lignes vides), y compris les lignes ne contenant que des tabulations ou des espaces. 

[\r\n]* supprimera alors le dernier CRLF (ou simplement LF, ce qui est important car le moteur de regex .NET correspond au $ entre un \r et un \n, assez curieusement). 

72
Tim Pietzcker

@ Tim Pietzcker - Ne travaille pas pour moi. Je dois changer un peu mais merci!
Ehhh C # Regex .. Je devais le changer à nouveau mais cela fonctionnait bien:

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

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

11
oobe

Vous pouvez essayer String.Replace("\n\n", "\n");

7
user807566

Essaye ça 

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

Sur la base du code d'Evgeny Sobolev, j'ai écrit cette méthode d'extension, qui limite également le dernier saut de ligne (obsolète) à l'aide de 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);
    }
}
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

Si vous êtes comme moi et qu'aucune des lignes ci-dessus ne fonctionne pour vous, j'ai alors cherché une fonction permettant de savoir si une chaîne est vide (et si c'est le cas, vous pouvez la détruire ou la supprimer, comme je l'ai fait)

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