2011-11-18 159 views
1

我在獲取字符串' - '的索引時遇到問題。讓我解釋我的問題。 首先,我必須從文本文件中讀取一行。在文本文件中的唯一行是「測試版= 62.5 *(西格瑪 - 德爾塔)/ 125」獲取字符索引

StreamReader rdr = new StreamReader(openPath, Encoding.Default); 

while (rdr.Peek() != -1) 
{ 
    string strInput = rdr.ReadLine(); 
} 

然後我需要得到一個char的索引「 - 」。

int col = strInput.IndexOf('-'); 

上面的'col'等於-1之後。但正如你所看到的,' - '字符在上面提到的從文本文件中讀取的字符串中。 我想不通爲什麼我得到-1作爲' - '的指數。幫我...

+1

它看起來像一個M連字符。 –

+0

它看起來像你的文件中有一個破折號不是' - '字符。這些是2個不同的字符。你能證實嗎? – flipchart

+0

複製 - 從您的文本文件中,粘貼到您的代碼,然後再試一次。另外,在'IndexOf'行放置一個斷點並檢查'strInput'的值。 –

回答

2

這兩個字符是不一樣的。看他們的長度:

(這被稱爲一個連接劃線,等於所述ASCII字符n的寬度)

VS

- 

(這是一個正常的ascii連字符或減號)

修改您的indexof以使用連字符( - )而不是連字符( - ),您應該得到正確的結果。

編輯:感謝sixlettervariables爲正確的術語

+3

第一個是* em * dash,而第二個是* en * dash。它們的命名方式是它們的寬度分別等於大寫字母M和N(儘管經常是短劃線寬度的一半)。如果你解決填字遊戲,你並不陌生,ems和ens。 – user7116

+0

+1爲瑣碎的知識sixlettervariables :) – albertjan

+0

實際上,一個em-dash看起來像 - ,而他的字符串包含 - (en-dash?),他正在尋找 - 。這變得令人困惑。 –

0

添加(臨時)一行代碼,只需int col = strInput.IndexOf('-');前:

System.Diagnostics.Debug.Assert(String.Equals(strInput, "Beta = 62.5 * (Sigma – Delta)/125"); 
1

你是不是尋找相同的字符,你的性格搜索應該是'–'而不是'-'

嘗試他的臺詞:

int col = a.IndexOf('–'); 
+0

我一半打字完全相同的答案:) +1 – albertjan