有没有办法使用LINQ从文本中删除额外的换行符?

时间:2012-08-13 04:30:46

标签: c# linq

我刚刚编写了一些代码来从某些文本中删除额外的换行符。每组连续的换行符都会折叠成一个换行符。

这似乎是使用LINQ简化代码的好地方。虽然我对LINQ很新,所以不知道如何做到这一点。有人可以提出解决方案吗?

这是我的原始代码:

/// <summary>
/// Collapse extra newlines.
/// </summary>
private string CollapseNewlines(string script)
{
    // Remove extra newlines.
    var lines = script.Split('\n');

    var output = new StringBuilder();

    bool prevLineWasEmpty = false;

    foreach (var line in lines)
    {
        if (line.Trim() == string.Empty)
        {
            if (prevLineWasEmpty)
            {
                continue; // Ignore this line.
            }

            prevLineWasEmpty = true;
        }
        else
        {
            prevLineWasEmpty = false;
        }

        output.Append(line);
        output.Append("\n");
    }

    return output.ToString();
}

2 个答案:

答案 0 :(得分:7)

试试这个:

var lines = script.Split('\n')
            .Where(line => !string.IsNullOrWhiteSpace(line));

string output = string.Join("\n", lines);

答案 1 :(得分:5)

为什么不使用正则表达式?

这样的东西
Regex.Replace(source, @"(\r\n)+", "\r\n");

Regex.Replace(source, @"\n+", "\n");

Regex Class

Regex.Replace Method (String, String)