【问题标题】:Why does removing new-lines from my verbatim string return only the last line?为什么从我的逐字字符串中删除换行符只返回最后一行?
【发布时间】:2013-01-24 16:12:05
【问题描述】:

我有以下代码:

string test = @"1
2
3";

这一行:

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

打印“3”,而不是“123”,这是我所期望的。为什么这个方法只返回我的字符串的最后一行,否则我怎样才能删除所有换行符?

【问题讨论】:

  • 如果你做类似test = test.Replace.Trim()的事情会发生什么
  • @DJKRAZE 同样的事情。

标签: c# string verbatim-string


【解决方案1】:

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

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

请参考Difference between “\n” and Environment.NewLine

【讨论】:

  • Verbatium 字符串不使用 "\r\n" 它使用源文件的编码,而理论上可以是任何东西。
  • @JeffWalkerCodeRanger 你错了。所有字符串,默认使用UTF-16,请参考this documentation page。 C# 支持两种形式的字符串文字:常规和逐字。两者都使用相同的编码。
  • @walkhard 是的,所有 C# 字符串都使用 UTF-16 编码。我指的是行尾编码(即它们是 Unix 还是 PC 行尾)。那确实“遵循源文件的编码”。因此,建议的代码不是从字符串中删除所有行尾的安全方法。
【解决方案2】:

如果您编写文本文件的系统和编译或运行它的系统之间的换行符可能不同,您可能想要这样做

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

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

【讨论】:

  • 假设这两行在同一个源文件中是正确的,因为源代码中的行结尾可以是任何东西。
【解决方案3】:

逐字字符串使用它所在的源代码文件的行尾。鉴于 git 等源代码控制环境可能会将行尾转换为字符串结尾的本机行

string test = @"1
2
3";

可以有任何一组行尾("\r\n""\r""\n")。删除任何这些可能的唯一安全方法是:

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

这没有假设两个代码 sn-ps 位于同一个源文件中(因为两个源文件不必具有相同的行结尾)。

【讨论】:

  • 获得了“逐字字符串使用它所在的源代码文件的行尾”的参考资料?当我看到这种行为时会很有用 - 即在 VS 中测试通过开发机器,在从 git 获取的 TeamCity 机器上失败。
  • @NickBaker 我想语言规范会这么说,但我认为还不清楚。我亲自测试并验证确实如此。
【解决方案4】:

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

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

【讨论】:

  • Verbatium 字符串不使用 "\r\n" 它使用源文件的编码,而理论上可以是任何东西。
  • @JeffWalkerCodeRanger 是的,理论上它可以是任何东西,但我确信在这种特殊情况下它实际上是 "\r\n",因为我知道 "\n" 已尝试但失败了,因为这是最常用的两个。此外,我给出的解决方案适用于“\n”和“\r”的任何组合。我不知道有任何系统使用超出这两者的某种组合的字符作为换行分隔符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2012-03-27
  • 1970-01-01
  • 2019-01-22
  • 2022-08-16
  • 1970-01-01
  • 2023-01-21
相关资源
最近更新 更多