2012-08-03 1081 views
2

爲什麼IndexOf在字符串中有反斜槓「\」時會失敗?IndexOf在字符串中存在反斜槓時失敗 - 爲什麼?

string tmpString = "acg2xs5d.dui"; 

string tmpString2 = @"c:\acg2xs5d.dui"; 

MessageBox.Show(tmpString.IndexOf(@tmpString2).ToString()); 


這將返回-1;無論。

如果我將tmpString2更改爲「acg2xs5d.dui」並刪除「c:\」,它將按預期返回0。

看來「\」導致它給出了「-1」的錯誤結果。

爲什麼會這樣,我該如何解決/陷阱呢?

+1

因爲反斜槓是一個轉義字符!你必須在字符串中放入兩次 – 2012-08-03 03:24:21

+0

因爲「\ a」與「a」不同。 – 2012-08-03 03:24:43

+0

我的tmpString2總是包含一個文件名,前面有目錄路徑。將目錄路徑中的單個反斜槓更改爲雙反斜槓的最簡單方法是什麼? – fraXis 2012-08-03 03:24:57

回答

14

你只需要使用的 tmpString2.IndexOf(@tmpString)

代替 tmpString.IndexOf(@tmpString2)

都是正確的,除了順序。 「\」不是轉義字符,因爲在字符串之前使用「@」。

+1

Well spotted :)'IndexOf()'作爲參數搜索的子字符串,而不是搜索的原始字符串... – BoltClock 2012-08-03 03:36:55

+0

@BoltClock它就像一個印刷錯誤 - 非常常見的錯誤:) – 2012-08-03 03:40:12

+3

+5讓評論者由於使用'@','\'不需要被轉義。 – AMissico 2012-08-03 03:46:44

-2

搜索前在字符串中再加一個斜槓。使用下面的代碼:

string tmpString = "acg2xs5d.dui"; 
string tmpString2 = "c:\\acg2xs5d.dui"; 
int a = tmpString2.IndexOf(tmpString); //returns 3 
+0

沒有必要 – 2012-08-03 03:35:25

+0

你能評論你的評論嗎? – Umesh 2012-08-03 03:37:26

+0

這裏沒有特殊的字符來標準化,所以沒有必要。 – BoltClock 2012-08-03 03:38:26