【问题标题】:Reading a line from text file returns unwanted slash从文本文件中读取一行返回不需要的斜杠
【发布时间】:2015-12-11 05:56:22
【问题描述】:

我有一个应用程序可以读取数千行文档。此文本文件中有一个特定的子字符串,有时以“12345”NNNNNNN 开头。问题是,每当 C# 读取该行时,它都会给我类似于“\12345\”NNNNNN 的内容。我已经尝试了 string.Replace(@"\", "") 扩展,但它仍然返回相同的值并且没有替换任何令我惊讶的东西。代码如下:

 maskList.AccountMask = @line.Substring(156, 40);
 maskList.AccountMask = maskList.AccountMask.Replace(@"\", "");

返回: "\"492200\"NNNNNNNNNN

有什么建议吗?

【问题讨论】:

  • 它实际上并不存在,字符串查看器只是转义引号。尝试将其打印到调试输出或控制台,您会发现斜线实际上并不存在。
  • 我已经调试了 2 个小时,但我的天啊,我作为程序员失败了。嘿,至少将其作为解决方案发布,其他人可能会遇到同样的问题:P
  • 不用担心,即使是我们当中最优秀的人,也已经花费了数小时来调试应该非常明显的东西。

标签: c#


【解决方案1】:

字符串的调试视图会转义通常会在代码中转义的内容。这意味着像内联引号或真正的 \'s 将用 \ 转义(使引号看起来像 \" 而单斜杠看起来像 \\)。

这些斜线不在实际字符串中,它们仅在文本查看器中存在。您可以通过将字符串写入控制台或调试输出来验证这一点。你的string.Replace 没有用,因为没有东西可以替换。

您可以使用一个非常小的控制台程序来验证这一点:

private static void Main(string[] args)
{
    string s = ((char)34) + "492200" + ((char)34) + "NNNNNNNNN";

    Console.WriteLine(s);

    Console.ReadKey(true);
}

字符 34 是 " 字符,所以我构造了字符串而不使用 \'s 在代码中对它们进行转义。在ReadKey 调用处设置断点并检查变量s 显示"\"492200\"NNNNNNNNN",但控制台打印出没有\ 的字符串:

您还会注意到该字符串也被引号包围,这些引号不是原始字符串的一部分。点击小放大镜会弹出“Text Visualizer”,显示未转义的字符串:

【讨论】:

  • 您也可以单击文本旁边的放大镜在新窗口中查看未转义的版本。
  • 是的,文本可视化器显示,我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 2017-10-10
  • 2019-02-13
相关资源
最近更新 更多