2012-07-25 69 views
2

我有一个字符串:在C#中,替换 “\” 到 “”

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

我试图取代\\\

我已经试过这样:

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

这些都不取代双反斜线单反斜线。

+0

你为什么要用\替换\\? \是一个转义字符,所以\\对所有意图和目的都是\ – RedEyedMonster 2012-07-25 09:04:22

+1

@Ilya该字符串很好,您不需要对它进行任何操作就可以在文件处理代码中使用它。 – 2012-07-25 09:08:44

回答

10

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

在正常的字符串文字中(那些不以@开头的文字),您需要在它们前面放置一个反斜杠(\)以避开某些字符。其中一个字符是反斜杠本身,所以如果要将一个反斜杠放入一个字符串中,请使用另一个反斜杠进行转义,这就是为什么path包含所有这些双反斜杠。在运行时,这些将是单反斜杠。

看到这里可用的转义序列:C# FAQ: Escpape Sequences

逐字字符串,另一方面(从一个@茨艾伦),不需要逃避大多数这些字符。所以@"\"实际上是\。您需要在逐字串中转义的唯一字符是引号。你只需输入一个双引号即可。所以@""""实际上是"

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

普通的字符串字面(注意\被转义):

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

或逐字字符串(不需要逃避\):

var path = @"d:\project\Bloomberg\trunk\UI.Demo\"; 
1
在这个字符串的 \\\逃逸

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

所以实际上说:

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

所以,当你与\你没有更换任何东西取代\\。双斜杠在正常字符串中看起来像\\\\。你在替换方法中做了正确的操作。

1

变化:

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

到:

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

,你会好的。请记住,\\表示正常字符串中的\,所以如果你想要实际的双反斜杠,你需要使用\\\\或简单地在字符串前面加上@作为前缀 - 就像在调用Replace时一样。其次,因为您可能不需要在特定情况下调用Replace,因为您看到的那些\\实际上是单反斜杠,因为您的字符串没有以@为前缀,并且转义序列被评估。

+0

“你会好的”意味着第一个字符串是不正确的。第一个字符串很好,可以用于文件处理代码而不会出现问题。 – 2012-07-25 09:06:47

+0

我有点意识到我的解释可能被解释为这样 - 因此我的第二段。 – 2012-07-25 09:08:57

2

你不会忘记把@?你的连锁店前面说过?

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

但是 - > @“d:\ project \ Bloomberg \ trunk \ UI.Demo \”;
是egal - >“d:/project/Bloomberg/trunk/UI.Demo/”;