从文本文件中读取一行会返回不需要的斜杠

时间:2015-12-10 21:27:37

标签: c#

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

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

返回: " \" 492200 \" NNNNNNNNNN

有什么建议吗?

1 个答案:

答案 0 :(得分:5)

字符串的调试视图会转义通常在代码中转义的内容。这意味着内联引号或实际引号等内容将使用\进行转义(引号类似于\",单斜线看起来像\\)。

这些斜杠不在实际字符串中,它们仅在文本查看器中。您可以通过将字符串写出到控制台或调试输出来验证。您的string.Replace无法正常工作,因为无需替换。

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

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

    Console.WriteLine(s);

    Console.ReadKey(true);
}

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

Missing Slashes

您还会注意到该字符串也被引号括起来,这些引号也不是原始字符串的一部分。点击小放大镜将显示" Text Visualizer"它显示了未转义的字符串:

Text Visualizer