我在.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());
,但这也不起作用。
想法?
答案 0 :(得分:5)
答案 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());