2

我有一个字符串:

var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

我正在尝试替换\\\.

我试过这个:

path = path.Replace("\\\\", "\\");
path = path.Replace(@"\\", @"\");

这些都没有用单反斜杠代替双反斜杠。

4

4 回答 4

10

path不包含任何双反斜杠。"blah\\blah"实际上是blah\blah

在普通字符串文字(不以 开头@)中,您需要通过在它们前面放置反斜杠 ( \) 来转义某些字符。其中一个字符是反斜杠本身,所以如果你想把一个反斜杠放到一个字符串中,你可以用另一个反斜杠对其进行转义,这就是为什么path包含所有这些双反斜杠的原因。在运行时,这些将是单个反斜杠。

有关可用的转义序列,请参见此处:C# FAQ:Escpape 序列

另一方面,逐字字符串(以 开头@)不需要对大多数字符进行转义。@"\"原来如此\。您需要在逐字字符串中转义的唯一字符是引号。您只需键入双引号即可。@""""实际上也是如此"

所以如果你想放入d:\project\Bloomberg\trunk\UI.Demo\一个字符串,你有两种可能性。

普通字符串文字(注意\已转义):

var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

或逐字字符串文字(无需转义\):

var path = @"d:\project\Bloomberg\trunk\UI.Demo\";
于 2012-07-25T09:03:06.483 回答
2

你别忘了放@?你链子前面说的?

var path = @"d:\\project\\Bloomberg\\trunk\\UI.Demo\\"; 

但是那个 -> @"d:\project\Bloomberg\trunk\UI.Demo\";
是平等的->“d:/project/Bloomberg/trunk/UI.Demo/”;

于 2012-07-25T09:07:56.550 回答
1

在此字符串中\\,转义为\

var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

所以这实际上是说:

@"d:\project\Bloomberg\trunk\UI.Demo\"

因此,当您替换为时\\\您不会替换任何东西。双斜线看起来像\\\\普通字符串。您在替换方法中正确执行了该操作。

于 2012-07-25T09:04:29.773 回答
1

改变:

var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

到:

var path = @"d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

你会很好的。请记住,这\\意味着\在普通字符串中,因此如果您想要实际的双反斜杠,您需要使用\\\\或简单地在字符串前面加上 @ - 就像在调用 Replace 时一样。

其次,您可能不需要在特定情况下调用 Replace,因为\\您看到的实际上是单个反斜杠,因为您的字符串没有以 @ 为前缀,并且转义序列被评估。

于 2012-07-25T09:05:50.680 回答