我有一个应用程序,可以读取数千行的文档。这个文本文件中有一个特定的子字符串,有时候会像这样开始" 12345" NNNNNNN。问题是每当C#读取该行时,它就会给我一些类似于" \ 12345 \" NNNNNN的东西。我已经尝试过string.Replace(@" \","")扩展,但它仍然返回相同的值,并且没有替换任何令我惊讶的东西。这是代码:
maskList.AccountMask = @line.Substring(156, 40);
maskList.AccountMask = maskList.AccountMask.Replace(@"\", "");
返回: " \" 492200 \" NNNNNNNNNN
有什么建议吗?
答案 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的字符串:
您还会注意到该字符串也被引号括起来,这些引号也不是原始字符串的一部分。点击小放大镜将显示" Text Visualizer"它显示了未转义的字符串: