首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在.NET中替换Linux NewLine中的NewLine

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

Stack Overflow用户
提问于 2014-01-16 02:51:45
回答 2查看 4K关注 0票数 5

在.NET中有一个字符串定义如下:

代码语言:javascript
复制
var str = @"line 1
line 2
line 3";

我想将Windows换行符替换为Linux等价物。(用\r\n代替\n)。

我尝试了var str2 = str.replace(Environment.NewLine, "\n");,但是结果是完全相同的字符串(str == str2为true)。

我猜Windows在字符串中用\r\n代替了\r\n,实际上没有改变任何东西。

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

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

想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-16 03:02:49

str在替换后等于str2,因为原始字符串一开始不包含\r\n

看这个fiddle

多行字符串使用\n

票数 5
EN

Stack Overflow用户

发布于 2014-01-16 03:47:04

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

带有换行符的文字字符串似乎根据工具的不同而变化。人们可能会担心Environment.NewLine在工具上可能也会有所不同(除了机器),但我还没有说明这一点。

您还可以复制和粘贴一个与工具中的“enter”/“breaks”不同的文字断线。

有趣的东西!:)

当像这样计算时,跨平台的安全赌注是在单行字符串中使用那些文字(如C#中的"\r\n“),而不要在编辑器中使用换行。

或者,如果对更多数据更方便的话,可以从文件中加载。

将其放到VS中,然后使用DotNetFiddle并看到不同的结果:

代码语言:javascript
复制
        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());      
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21152515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档