2009-08-05 60 views
2

這對我沒有任何意義。一定是錯的或痛苦的明顯。基本字符串比較中的奇怪行爲

切片和切塊後,我得到了2個瓦爾在vb.net以下值:

strTag = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" 
tmp = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" 

比較瓦爾提供虛假:

strTag = tmp ' ==> false 

比較值直接就在那裏給真的:

"&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" ' ==> true 

都是字符串,我試過各種東西:string.compare,stringent g.equals,也正則表達式,等等,等等一切都可以完美兼容所有simlilar結構的其他字符串,只是沒有,只有不與

"vermittler_person_Name" 
中間

...任何想法?

+0

這不是逐字代碼。直接分配它們可以正常工作。前兩行是字符串操作的結果,從手錶值字段複製...(我不想發佈太多的代碼) – handsomeGun 2009-08-05 19:10:12

+0

VS2005無法複製 – 2009-08-05 19:12:14

+0

第一個是這樣組成的 strTag = opensTag& 「」&tags(i)&「」&closingTag 第二個是一個很長的字符串從outlook MailItem.HTMLbody – handsomeGun 2009-08-05 19:12:35

回答

8

我強烈懷疑,雖然兩個顯示字符串是相等的,內部數據相等。那裏可能有任何數量的非打印字符。

如果你能夠重現這一點,我建議你看看有問題的字符串的每個字符的Unicode值。如果我是對的,我們不會能夠通過一個只包含可見字符的SO帖子來重現這一點,原因很明顯。

+0

不會顯示在記事本++或類似的非打印字符?但無論如何,偉大的一點!我會嘗試可重複的代碼,馬上回來。謝謝! – handsomeGun 2009-08-05 19:20:14

+0

@handsomeGun:你如何將它們複製到記事本++開始?如果它來自調試器,那可能不會將它們放入剪貼板。 – 2009-08-05 19:24:38

+0

好吧,他們通常會被複製爲'怪異'的字符。但你是現貨! .length顯示1的差異,所以我會通過字符串循環來發現有問題的角色。 (這與其他十幾個人用同樣的方法並沒有這樣做,這就是爲什麼我非常驚訝......)謝謝! – handsomeGun 2009-08-05 19:38:12

0
dim strTag as String 
dim tmp as String 

strTag = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" 
tmp = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" 

Console.WriteLine(strTag = tmp) 'prints True 

你可以發佈代碼,在哪裏做比較?

編輯:在你做比較,打印的內容到控制檯,看看他們不同

Console.WriteLine(strTag) 
Console.WriteLine(tmp) 
0

我不能瑞普這個問題。我試着下面的代碼VS2008 RTM和相同值爲True

Sub Main() 
    Dim strTag = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" 
    Dim tmp = "&lt;#<span class=SpellE>vermittler_person_Name</span>&gt;" 
    Dim same = strTag = tmp 
    Stop 
End Sub 

你能提供你的問題的一個可運行的示例代碼?包括在Visual Studio版本和選項(嚴格的,明確的,等...)

3

可以檢查兩個字符串的長度,看看它們是相同的,或兩者轉換爲相同的情況下(上限或下限),看看是否是造成差別

+0

嘗試過的情況下,會立即嘗試長度。謝謝! – handsomeGun 2009-08-05 19:21:24

+0

是的,.length是一個關閉。該死的。謝謝! – handsomeGun 2009-08-05 19:39:14

0

我不有VB/.NET的經驗,但這聽起來與java中的行爲類似。

在java中,你聲明瞭兩個字符串對象。

String a = new String("aa"); 
String b = new String("aa"); 

a.equals(b)將返回truea==b將返回false

另外"aa"=="aa"將返回true。

這是因爲"aa"是一個文字字符串(與原始類似),而ab是兩個不同的內存不同的對象。

VB/.NET行爲可能類似(我不知道)。

+0

不適用於VB.net中的字符串,雖然對於大多數參考類型都是如此。 – 2012-02-07 19:50:03