2012-09-13 45 views
18

爲了在我的代碼調試的問題,我已經宣佈了以下兩個字符串,假設他們是等價的:字符串平等 - 這裏發生了什麼?

String print = "8A9B485ECDC56B6E0FD023D6994A57EEC49B0717"; 
String newPrint = thumbprint.Trim().Replace(" ", "").ToUpper(); 

我發現事實並非如此。太好了,這是我問題的根源。但是,我正在檢查立即窗口中的內容(在聲明後面的行),並且不明白髮生了什麼。這裏是輸出:

print 
"8A9B485ECDC56B6E0FD023D6994A57EEC49B0717" 
newPrint 
"‎8A9B485ECDC56B6E0FD023D6994A57EEC49B0717" 
String.Compare(print, newPrint); 
0 
print == newPrint 
false 
print.Equals(newPrint) 
false 

呵呵?他們爲什麼不平等?

編輯:

我需要使用'thumbprint'作爲基礎。這是一個用戶輸入的字符串。我只是使用'newPrint'作爲臨時變量來保存修剪/加價值。打印是預期的結果。

+8

指紋!= print –

+5

你的第一個變量是「print」,你的第二個變量是基於「thumbprint」的,所以它們很可能不等價。這只是一個錯字嗎? – BunjiquoBianco

+1

@DanielHilgarth忽略指紋。沒關係,看輸出。 – Erix

回答

28

的確,它們並不等同。我複製了兩個值,newPrint的長度爲41,而print的長度爲40. newPrint的第一個字符是一個ASCII值爲14的字符。有意思的是,這個字符已經從您的直接窗口轉移到了我的LINQPad。

print.Length 
40 
newPrint.Length 
41 
(sbyte)print[0] 
56 
(sbyte)newPrint[0] 
14 

這實際上無關,與你的TrimReplace電話,但有一個事實,即你正在使用thumbprint代替print爲基數。我只能假設thumbprint包含該額外的字符。它來自哪裏,我不知道。如果你想改變你的第二條線來使用print而不是thumbprint,你會得到你期望的結果。

+2

啊,是的,你實際上可以看到它需要2按VS左/右箭頭移動光標! – BunjiquoBianco

+0

我明白了,謝謝。顯然這個字符是一個'移出,替代字符集'。不知道那裏做了什麼...... – Erix

+3

ASCII 14是「SO」字符 - 最初用於選擇不同的字符集。不知道爲什麼地球上它會彈出這裏雖然... –

18

您發佈的字符串是而不是等於。 只是這樣做:

string val = "8A9B485ECDC56B6E0FD023D6994A57EEC49B0717"; 
string val1 = "‎8A9B485ECDC56B6E0FD023D6994A57EEC49B0717"; 
var bt = System.Text.Encoding.UTF8.GetBytes(val); 
var bt_1 = System.Text.Encoding.UTF8.GetBytes(val1); 

你會看到第二個數組包含多個元素begining

226 
128 
142 

此後3個元素的內容相等。

原因String.Compare作品是原因:

比較使用當前培養以獲得培養物特異性 信息,例如套管規則和 單個字符

+0

1爲解釋爲什麼String.Compare返回0. –

0

有字母順序問題出錯了。如果沒有,pl。指定完整的環境,因爲我已經在MS .NET上嘗試過,但不是在Mono上。 試試這個方法: - 我沒有得到任何錯誤,跟蹤語句的輸出是

字符串相等=真

void TestString() 
{ 
    String print = "8A9B485ECDC56B6E0FD023D6994A57EEC49B0717"; 
    String newPrint = print.Trim().Replace(" ", "").ToUpper(); 
    Trace.TraceInformation("Strings are equal = {0}", (print == newPrint) && (print.Equals(newPrint))); 
    Debug.Assert(print == newPrint); 
    Debug.Assert(print.Equals(newPrint)); 
} 
+4

你對派對有點遲到。請參閱另外兩個答案來了解發生了什麼。 –

相關問題