C#で文字列から改行を削除する最も簡単な方法は何ですか?


115

_contentが改行文字で終わっていないことを確認したい:

_content = sb.ToString().Trim(new char[] { Environment.NewLine });

ただし、Trimには文字列のコレクションのオーバーロードされたパラメーターはなく、文字のみがあるため、上記のコードは機能しません

文字列の末尾からEnivronment.Newlineを削除する最も簡単なワンライナーは何ですか?


4
ところで、おそらくTrimEnd
Marc Gravellが必要です。

回答:


260

次は私のために働きます。

sb.ToString().TrimEnd( '\r', '\n' );

または

sb.ToString().TrimEnd( Environment.NewLine.ToCharArray());

非常に簡潔で、\ rを\ n個の問題、素敵で取引
エドワードTanguay

1
改行文字を構成する文字の任意の組み合わせをトリミングすると、根本的な問題と質問の精神に対処できますが、一般的な意味で不要な機能の可能性も残ります。ファイル処理のシナリオで、最初の\ nをそのままにして、HeresALineForUnixToBeFedFromWindows \ n \ r \ nの文字列を残す必要があることがわかりました。冗長である一方で、John Skeetの回答はおそらく最良であり、Scott WeinsteinのReadLineもより正確です(ただし、オーバーヘッドが多少増える可能性があります)
b_levitt

26
TrimEnd()はすでにパラメータなしでジョブを実行しています!msdn.microsoft.com/de-de/library/…およびmsdn.microsoft.com/de-de/library/…
マルクス

3
@Markusありがとうこの動作はしたくなかったが、経験していたので、これを見つけた。私は印象を受けました\ n空白ではありませんでしたが、.TrimEndと.Trimはすべての空白文字をネイティブでクリアします
デビッド・カリガン


14

どうですか:

public static string TrimNewLines(string text)
{
    while (text.EndsWith(Environment.NewLine))
    {
        text = text.Substring(0, text.Length - Environment.NewLine.Length);
    }
    return text;
}

複数の改行がある場合は多少非効率的ですが、機能します。

また、あなたはそれが(例えば)トリミング気にしない場合"\r\r\r\r""\n\n\n\n"、むしろ単により"\r\n\r\n\r\n"

// No need to create a new array each time
private static readonly char[] NewLineChars = Environment.NewLine.ToCharArray();

public static string TrimNewLines(string text)
{
    return text.TrimEnd(NewLineChars);
}

1
おそらく最も正確な解決策ですが、ワンライナーではありません:-)
bang

9

フレームワークを使用します。ReadLine()メソッドには、次のような記述があります。

行は、一連の文字の後にラインフィード( "\ n")、キャリッジリターン( "\ r")、またはキャリッジリターンの直後にラインフィード( "\ r \ n")が続くものとして定義されます。返される文字列には、終了の改行または改行は含まれません。

だから、以下はトリックを行います

_content = new StringReader(sb.ToString()).ReadLine();

1
エレガントですが、このラインを読んでいる他の人には理解しにくいです。説明コメントが必要です(もちろん同じ行でワンライナーのままに:))
gumo

1
文字列に複数の行があり、最後の空の行のみを削除したい場合は、そうしません。
Florian Berger

6

どうですか

_content = sb.ToString().Trim(Environment.NewLine.ToCharArray());

これはまったく同じことではありません。たとえば、Environment.NewLineがcrlfである場合でも、「abc \ n \ n \ n \ n \ n」をトリミングします
Marc Gravell

1
それを機能として宣言します:-)私はソリューションが好きです。
Stefan Steinegger、2009年

5
_content = sb.TrimEnd(Environment.NewLine.ToCharArray());

もちろん、これにより「\ r \ r \ r \ r」や「\ n \ n \ n \ n」などの組み合わせが削除されます。また、NewLineが「\ n \ r」以外の「環境」では、奇妙な動作が発生する可能性があります:-)

しかし、これを使用できる場合は、文字列の末尾にある改行文字を削除する最も効果的な方法です。


3

どうですか:

string text = sb.ToString().TrimEnd(null)

これにより、文字列の末尾からすべての空白文字が取得されます。改行以外の空白を保持したい場合にのみ問題になります。


1

やや無回答ですが、文字列から改行を削除する最も簡単な方法は、最初に文字列に改行がないようにすることです。自分のコードから改行されないようにすることです。つまり、改行を削除するネイティブ関数を使用します。多くのストリームおよびファイル/ ioメソッドは、行ごとに出力を要求する場合、改行を含みませんが、何かをSystem.IO.BufferedStream

のようなものSystem.IO.File.ReadAllLinesは、System.IO.File.ReadAllTextほとんどのReadLine場合の代わりに使用できRead、適切なタイプのストリーム(例:)を使用して作業する場合の代わりに使用できますBufferedStream


0

Markusが指摘したように、TrimEndは現在この仕事をしています。Windows Phone 7.8環境で文字列の両端から改行と空白を取得する必要がありました。さまざまなより複雑なオプションを追跡した後、私の問題はTrim()のみを使用して解決されました-次のテストにうまく合格しました

   [TestMethod]
    [Description("TrimNewLines tests")]
    public void Test_TrimNewLines()
    {
        Test_TrimNewLines_runTest("\n\r     testi    \n\r", "testi");
        Test_TrimNewLines_runTest("\r     testi    \r", "testi");
        Test_TrimNewLines_runTest("\n     testi    \n", "testi");
        Test_TrimNewLines_runTest("\r\r\r\r\n\r     testi   \r\r\r\r \n\r", "testi");
        Test_TrimNewLines_runTest("\n\r  \n\n\n\n   testi äål.,    \n\r", "testi äål.,");
        Test_TrimNewLines_runTest("\n\n\n\n     testi  ja testi  \n\r\n\n\n\n", "testi  ja testi");
        Test_TrimNewLines_runTest("", "");
        Test_TrimNewLines_runTest("\n\r\n\n\r\n", "");
        Test_TrimNewLines_runTest("\n\r \n\n \n\n", "");
    }

    private static void Test_TrimNewLines_runTest(string _before, string _expected)
    {
        string _response = _before.Trim();
        Assert.IsTrue(_expected == _response, "string '" + _before + "' was translated to '" + _response + "' - should have been '" + _expected + "'");
    }

-2

テキスト全体の改行を削除する必要がありました。だから私は使用しました:

            while (text.Contains(Environment.NewLine))
            {
                text = text.Substring(0, text.Length - Environment.NewLine.Length);
            }

1
最後にないNewLine(s)がテキストに含まれている場合、これは障害になります。
Stefan Bergfeldt 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.