string.replace严重破坏了

时间:2010-05-07 10:49:55

标签: c# string replace

"C://test/test/test.png" -> blub

    blub = blub.Replace(@"/", @"\");

result = "C:\\\\test\\test\\test.png"

这有什么意义?它取代了一个/两个\

7 个答案:

答案 0 :(得分:9)

实际上有效:

string blub = "C://test/test/test.png";
string blub2 = blub.Replace(@"/", @"\");

Console.WriteLine(blub);
Console.WriteLine(blub2);

输出:

C://test/test/test.png
C:\\test\test\test.png

但是在调试器中查看字符串确实会显示您描述的效果(以及如何在没有@的代码中编写字符串文字。)

之前我注意到了这一点,但从未发现调试器选择此格式的原因。

答案 1 :(得分:8)

不,它没有。

您所看到的是根据C#规则正确格式化的字符串,并且由于您看到的输出显示为没有使用@字符作为前缀,因此每个反斜杠都会加倍,因为如果您想要首先使用该字符串,那就是您必须编写的内容。

创建一个新的控制台应用程序并将结果写入控制台,您将看到该字符串看起来像您想要的那样。

所以这只是你如何看待字符串的一个神器(我假设调试器)。

答案 2 :(得分:3)

C#中的\字符是转义字符,所以如果你要将它用作\字符,你需要两个 - 否则下一个字符会被特别处理(换行等)。

请参阅What character escape sequences are available? (C#)

答案 3 :(得分:2)

字符\是一个特殊字符,它在字符串文字中更改后面字符的含义。因此,当您引用\本身时,需要对其进行转义:\\

答案 4 :(得分:1)

查找“转义字符”。

答案 5 :(得分:1)

它完成了应有的工作。 "\\"@"\"

相同

“\”是转义字符。如果字符串前没有逐字记录“@”,则单个\显示为"\\"

答案 6 :(得分:0)

在说出类似的话之前你应该三思而行......

string.Replace函数是已经存在很长时间的基本功能....每当你发现你遇到类似问题时,它可能不是被破坏的功能,而是你理解或使用它