2012-07-25 62 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/」;