How to remove empty lines from a formatted string?

后端 未结 11 1465
一生所求
一生所求 2020-12-01 02:24

How to remove empty lines in a string in C#? I am generating some text files in C# (winforms) and for some reason there are some empty lines. How can I remove them after the

相关标签:
11条回答
  • 2020-12-01 02:33
    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 讨论(0)
  • 2020-12-01 02:40

    If you also want to remove lines that only contain whitespace, use

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

    ^\s+$ will remove everything from the first blank line to the last (in a contiguous block of empty lines), including lines that only contain tabs or spaces.

    [\r\n]* will then remove the last CRLF (or just LF which is important because the .NET regex engine matches the $ between a \r and a \n, funnily enough).

    0 讨论(0)
  • 2020-12-01 02:41

    This pattern works perfect to remove empty lines and lines with only spaces and/or tabs.

    s = Regex.Replace(s, "^\s*(\r\n|\Z)", "", RegexOptions.Multiline)
    
    0 讨论(0)
  • 2020-12-01 02:43

    I tried the answers above, but some of them with regex does not work right.

    If you use regex to find the empty lines, you cant use the same for deleting.

    Because it will erase "break lines" of lines that are not empty.

    You have to use "regex groups" for this replace.

    Some others answers here without regex can have performance issues.

        private string remove_empty_lines(string text) {
            StringBuilder text_sb = new StringBuilder(text);
            Regex rg_spaces = new Regex(@"(\r\n|\r|\n)([\s]+\r\n|[\s]+\r|[\s]+\n)");
            Match m = rg_spaces.Match(text_sb.ToString());
            while (m.Success) {
                text_sb = text_sb.Replace(m.Groups[2].Value, "");
                m = rg_spaces.Match(text_sb.ToString());
            }
            return text_sb.ToString().Trim();
        }
    
    0 讨论(0)
  • 2020-12-01 02:45

    Try this

    Regex.Replace(subjectString, @"^\r?\n?$", "", RegexOptions.Multiline);
    
    0 讨论(0)
  • 2020-12-01 02:45

    Based on Evgeny Sobolev's code, I wrote this extension method, which also trims the last (obsolete) line break using 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 讨论(0)
提交回复
热议问题