web-dev-qa-db-ja.com

フォーマットされた文字列から空の行を削除する方法は?

C#で文字列の空行を削除する方法は? C#(winforms)でテキストファイルを生成していますが、何らかの理由で空の行があります。文字列が生成された後にそれらを削除するにはどうすればよいですか( StringBuilder および TextWrite を使用)。

テキストファイルの例:

THIS IS A LINE



THIS IS ANOTHER LINE AFTER SOME EMPTY LINES!

ありがとう。

32
Saeid Yazdani

空白のみを含む行も削除する場合は、使用します

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

^\s+$は、タブまたはスペースのみを含む行を含め、最初の空白行から最後まで(空行の連続ブロック内)をすべて削除します。

[\r\n]*は最後のCRLFを削除します(またはLFのみ。これは.NET正規表現エンジンが$の間\rおよび\n、おかしなことに十分です)。

78
Tim Pietzcker

@Tim Pietzcker-私のために働いていません。少し変更する必要がありますが、thx!
ええC#正規表現..もう一度変更する必要がありましたが、これはうまく機能しています。

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

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

14
oobe

String.Replace("\n\n", "\n");を試すことができます

8
user807566

これを試して

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();
}
1
Evgeny Sobolev
    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;

    }
1
keval choudhary

Evgeny Sobolevのコードに基づいて、この拡張メソッドを作成しました。これは、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

あなたが私のようで、上記の行のどれもがyaのために機能しなかった場合、文字列が空であるかどうかを伝えることができる関数を探しました(そうであれば、私がやったように、それを破壊または削除できます)

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