次のコードがあります。
string test = @"1
2
3";
この行:
Console.WriteLine(test.Replace("\n", "")); //3
「123」ではなく「3」と表示されます。これは私が期待していたものです。このメソッドが文字列の最後の行のみを返すのはなぜですか? また、改行をすべて削除するにはどうすればよいですか?
次のコードがあります。
string test = @"1
2
3";
この行:
Console.WriteLine(test.Replace("\n", "")); //3
「123」ではなく「3」と表示されます。これは私が期待していたものです。このメソッドが文字列の最後の行のみを返すのはなぜですか? また、改行をすべて削除するにはどうすればよいですか?
Console.WriteLine(test.Replace("\n", ""));
私のためにすべての数字を返します。改行を扱うときは、改行が である可能性があることに注意する必要があり\r\n
ます。これはプラットフォームによって異なります。この場合、これを使用する必要があります。
test.Replace("\r\n", "")
// or better:
test.Replace(Environment.NewLine, "")
「\n」とEnvironment.NewLineの違いを参照
テキストファイルを作成するシステムと、それをコンパイルまたは実行するシステムとで改行が異なる可能性がある場合は、次のことを行うことができます。
string test = @"1
2
3";
Console.WriteLine(test.Replace(@"
", "");
文字列リテラルの改行が、置き換える改行と同じになるように最善を尽くします。
逐語的な文字列は、それが含まれるソース コード ファイルの行末を使用します。
string test = @"1
2
3";
行末の任意のセット ( "\r\n"
、"\r"
、または"\n"
) を持つことができます。これらの可能性のあるものを削除する唯一の安全な方法は次のとおりです。
Console.WriteLine(test.Replace("\n", "").Replace("\r", ""));
これは、2 つのコード スニペットが同じソース ファイルにあることを想定していません (2 つのソース ファイルの行末が同じである必要はないため)。
逐語的な文字列が"\r\n"
改行として使用されているため、置換の結果は"1\r2\r3"
.
代わりに使用test.Replace("\r\n", "")
すると、期待どおりに機能します。任意の数の\r
orのケースを処理するに\n
は: test.Replace("\r", "").Replace("\n", "")
. \r
、\n
、または\r\n
セパレータとして機能します。