在基本字符串比较中完全奇怪的行为

时间:2009-08-05 19:01:24

标签: .net vb.net string

这对我没有任何意义。必须是错误的或痛苦明显的。

切片和切块后,我在vb.net中得到了2个具有以下值的变量:

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,string.equals,还有regex等等。所有其他字符串都采用了相似的结构,只是没有,只有不用

"vermittler_person_Name"

中间......有什么想法吗?

5 个答案:

答案 0 :(得分:8)

我强烈怀疑虽然两个显示的字符串相等,但内部数据不是相等。那里可以有任意数量的非打印字符。

如果您能够重现这一点,我建议您查看有问题的字符串的每个字符的Unicode值。如果我是对的,我们将不会能够通过仅包含可见字符的SO帖子重现这一点,原因显而易见。

答案 1 :(得分:3)

你可以检查两个字符串的长度,看它们是否相同,或者将它们转换成相同的情况(上面或下面),看看是否会造成差异

答案 2 :(得分: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)

答案 3 :(得分: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版本和选项(Strict,Explicit等等)

答案 4 :(得分:0)

我没有VB / .NET经验,但这听起来与java中的行为类似。

在java中,声明两个字符串对象。

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

a.equals(b)将返回true,但a==b将返回false

同样"aa"=="aa"将返回true。

这是因为"aa"是一个文字字符串(类似于原语),而ab是两个在内存中不同的不同对象。

VB / .NET行为可能类似(我不知道)。