为什么从我的逐字字符串中删除换行只返回最后一行?

时间:2013-01-24 16:12:06

标签: c# string verbatim-string

我有以下代码:

string test = @"1
2
3";

这一行:

Console.WriteLine(test.Replace("\n", "")); //3

打印“3”,而不是“123”,这是我的预期。为什么这个方法只返回我的字符串的最后一行,以及如何删除所有新行?

4 个答案:

答案 0 :(得分:6)

Console.WriteLine(test.Replace("\n", ""));为我返回所有数字。在处理换行符时,您必须知道换行符可能是\r\n,这取决于平台。在这种情况下,您应该使用此:

test.Replace("\r\n", "")
// or better:
test.Replace(Environment.NewLine, "")

Refrer to Difference between “\n” and Environment.NewLine

答案 1 :(得分:2)

如果构成文本文件的系统与编译或运行文本文件的系统之间的换行符可能不同,那么您可能希望这样做

string test = @"1
2
3";
Console.WriteLine(test.Replace(@"
", "");

尽力确保字符串文字中的换行符与您要替换的换行符相同。

答案 2 :(得分:1)

逐字字符串使用它所在的源代码文件的行结尾。假设像git这样的源控制环境可能会将行结尾转换为结束字符串的本机行

string test = @"1
2
3";

可以包含任何行结尾("\r\n""\r""\n")。删除任何可能的唯一安全方法是:

Console.WriteLine(test.Replace("\n", "").Replace("\r", ""));

这不会假设两个代码片段在同一个源文件中(因为两个源文件不必具有相同的行结尾)。

答案 3 :(得分:0)

逐字字符串使用"\r\n"作为换行符,因此您的替换结果为"1\r2\r3"

如果您使用test.Replace("\r\n", ""),它将按预期工作。要处理任意数量\r\n使用的情况:test.Replace("\r", "").Replace("\n", "")。这适用于\r\n\r\n作为分隔符。