比较字符串 - ASCII空格

时间:2012-08-18 18:39:01

标签: vb.net

这样做有什么区别:

Dim strTest As String
If strTest > " " Then

End If

和此:

Dim strTest As String
If strTest <> "" Then

End If

我认为代码示例1是比较ASCII值(SPACE的ASCII代码是32)。我查看了MSDN上的String部分,但我找不到答案。

更新

我也对这里发生的事情感到困惑:

 Dim strTest As String = "Test"
  If strTest > " " Then

  End If

1 个答案:

答案 0 :(得分:1)

>(大于)运算符将按字母顺序或字符代码值顺序(取决于Option Compare设置)进行测试,而<>(不等于)运算符将测试平等。只要两个字符串完全不同,<>将始终评估为True。只要运算符右侧的字符串按字母顺序排在第一个字符串之后,或者按字符代码值,>将计算为true。因此:

Option Compare Text  ' Compare strings alphabetically

...

Dim x As String = "Hello"
Dim y As String = "World"

If x <> y Then
    ' This block is executed because the strings are different
Else
    ' This block is skipped
End If

If x > y Then
    ' This block is skipped
Else
    ' This block is executed because "Hello" is less than "World" alphabetically
End If

但是,在您的问题中,您将空字符串变量(设置为Nothing)与空字符串进行比较。在这种情况下,比较运算符将空变量视为空字符串。因此,Nothing <> ""应评估为False,因为运算符的两边都被视为空字符串。空字符串或空字符串应始终被视为排序顺序中的第一个,因此Nothing > "Hello"应评估为False,因为空字符串先于其他所有字符串。但是,Nothing > ""应该评估为False,因为它们都是相同的,因此它们都不会出现在另一个之前或之后。

要回答最后一个问题,"Test" > " "将测试字母T是否在空格之前或之后。如果Option Compare设置为Text,它将按字母顺序进行比较,并应返回True(这最终取决于您的语言环境的字母排序)。如果Option Compare设置为Binary,则会根据字符代码值对它们进行比较。如果它们是ASCII字符串,则空格字符的值低于字母,如T,因此它也应返回True