如何在.NET中替换Linux NewLine中的NewLine

时间:2014-01-16 02:51:45

标签: c# .net newline line-breaks

我在.NET中定义了一个字符串,如下所示:

var str = @"line 1
line 2
line 3";

我想替换Linux等效的Windows换行符。 (仅为\r\n替换\n)。

我尝试var str2 = str.replace(Environment.NewLine, "\n");但结果完全相同(str == str2为真)。

我想Windows会用\n替换字符串中的\r\n,实际上不会改变任何内容。

我尝试了var str2 = str.replace(Environment.NewLine, '\n');但是出现了编译错误,因为一个参数是字符串而另一个是char。

我甚至试过var str2 = str.replace(Environment.NewLine, '\n'.ToString());,但这也不起作用。

想法?

2 个答案:

答案 0 :(得分:5)

替换后

str等于str2因为您的原始字符串首先不包含\r\n

请参阅此fiddle

多行字符串使用\n

答案 1 :(得分:2)

看起来它在很大程度上取决于您正在使用的工具。 AND,关于如何键入或粘贴文字。

带换行符的文字字符串似乎因工具而异。 有人可能会担心Environment.NewLine也可能因工具而异(除了机器),但我还没有表现出来。

你也可以复制&使用与工具中的“输入”/“返回”不同的换行符粘贴文字。
好玩的东西! :)

当它像这样计算时,跨平台的安全投注就是在单行字符串中使用这些文字 - 例如C#中的“\ r \ n” - 并且不要在编辑器中使用换行符。<登记/> 或者,如果更方便更多数据,可以从文件加载。


将其放入VS,然后放入DotNetFiddle,看到不同的结果:

        var strMyString = @"start
        asdf
        end";
        byte[] ASCIIValues = System.Text.Encoding.ASCII.GetBytes(strMyString);
        string strENL = "";
        foreach (byte b in ASCIIValues)
        {
            strENL += b + " ";
        }
        Console.WriteLine("strMyString is as ascii: " + strENL);

        /////////
        Console.WriteLine("\n\n");
        var str2 = strMyString.Replace("\r","");
        Console.WriteLine("string 2 matches == " + (strMyString == str2).ToString());

        var str3 = strMyString.Replace("\n", "");
        Console.WriteLine("string 3 matches == " + (strMyString == str3).ToString());

        var str4 = strMyString.Replace(Environment.NewLine,"\n");
        Console.WriteLine("string 4 matches == " + (strMyString == str4).ToString());

        var str5 = strMyString.Replace(Environment.NewLine, "\r");
        Console.WriteLine("string 4 matches == " + (strMyString == str5).ToString());

        /////////
        Console.WriteLine("\n\n");
        strENL = "";
        ASCIIValues = System.Text.Encoding.ASCII.GetBytes(Environment.NewLine);

        foreach (byte b in ASCIIValues)
        {
            strENL += b;
        }
        Console.WriteLine("Environment.NewLine is as ascii: " + strENL);

        /////////


        Console.WriteLine("\n\n");
        Console.WriteLine((Environment.NewLine == "\n").ToString());
        Console.WriteLine((Environment.NewLine == "\r").ToString());
        Console.WriteLine((Environment.NewLine == "\r\n").ToString());