2012-06-25 35 views
0

我有以下字符串:c#字符串替換爲反斜槓嗎?

"\\\\AAA.AA.A.AA\\d$\\ivr\\vm\\2012May\\29\\10231_1723221348.vox" 

我想它看起來像:

"\\AAA.AA.A.AA\d$\ivr\vm\2012May\29\10231_1723221348.vox" 

我已經試過

fileToConvert.Replace(@"\\",@"\") 

這將產生:

"\\AAA.AA.A.AA\\d$\\ivr\\vm\\2012May\\29\\10231_1723221348.vox" 

瓦Ÿ?!?

謝謝大家!

+5

是你的輸入和輸出字符串逐字字符串?他們不這樣看。您的替換正在按預期工作。 – BoltClock

+0

當你使用'Console.Writeline(yourFirstString);'時,結果如何?這是你如何得到你的結果? – dwerner

+0

@dash:你應該停止[meta](http://meta.stackoverflow.com/users/137537/boltclocks-a-unicorn):) – BoltClock

回答

2

我猜你在調試器的外觀和這就是爲什麼你會得到這種行爲......

每個\\實際上是一個\。這就是爲什麼你把\\\\替換爲\\(兩個「\」替換爲一個) ,因爲\\實際上只有一個「\」,所以替換後仍然會得到「\」(因爲它沒有找到兩個「\」字符串

的原因是,如果你想有標籤(\ t)的性格,你將有新的生產線"\r\n"字符串"\t" \字符標誌着一個特殊字符,例如。 所以當你真正想擁有一個「 \'字符串中的字符在之前用一個'\'字符標記 - 例如"\\"

這意味着當您看到「\\ AAA.AA.A.AA \ d $ \ ivr \ vm \ 2012May \ 29 \ 10231_172322134 8.vox「,實際的字符串是」\ AAA.AA.A.A.AA \ d $ \ ivr \ vm \ 2012May \ 29 \ 10231_1723221348.vox「

因此fileToConvert.Replace(@"\\",@"\")會使它看起來像這樣:

"\AAA.AA.A.AA\d$\ivr\vm\2012May\29\10231_1723221348.vox"

,您將在調試器中看到的"\\AAA.AA.A.AA\\d$\\ivr\\vm\\2012May\\29\\10231_1723221348.vox"


對於一個結論:

你不需要做任何事情 - 甚至沒有fileToConvert.Replace(@"\\",@"\")因爲你原來的字符串(你在調試看到爲"\\\\AAA.AA.A.AA\\d$\\ivr\\vm\\2012May\\29\\10231_1723221348.vox")實際上是"\\AAA.AA.A.AA\d$\ivr\vm\2012May\29\10231_1723221348.vox"

+0

你有什麼建議? – Har

+0

你應該保留原來的字符串,它實際上是「\\ AAA.AA.A.AA \ d $ \ ivr \ vm \ 2012May \ 29 \ 10231_1723221348.vox」 - 你不必做一件事情(你應該甚至不使用替換(@「\\」,@「\」)') – eyossi

4

我猜你正在檢查調試器中的結果字符串。該字符串將被轉義,即TAB是\ t並返回是\ n。通過單擊值旁邊的放大鏡圖標可以檢查「實際」值。

另外,打印到終端(例如System.Console.WriteLine())將顯示「正確」的值。

+0

'.Replace(@「\\」,@「\」 )'按我期望的那樣工作。 – bluevector

+0

這裏源字符串是「@」逐字。 – dwerner

+0

那麼我如何看待真正的價值呢? – Har

0
string s = @"\\\\AAA.AA.A.AA\\d$\\ivr\\vm\\2012May\\29\\10231_1723221348.vox"; 
    var output = s.Replace(@"\\",@"\"); 

我試過上面的代碼,它工作正常。