【问题标题】:Comparing strings in VB.NET在 VB.NET 中比较字符串
【发布时间】:2009-05-23 05:30:25
【问题描述】:

希望这应该是一个简单的问题。在 Java 中,我认为是 compareTo()

如何比较两个字符串变量以确定它们是否相同?

即:

If (string1 = string2 And string3 = string4) Then
    'perform operation
Else
    'perform another operation
End If

【问题讨论】:

  • 这是“经典”vb 还是 vb.net?
  • visual web developer 2008.vb.net 我假设的那个

标签: vb.net string compare


【解决方案1】:

我建议使用String.Compare 方法。使用该方法,您还可以控制是否让它执行区分大小写的比较。

示例:

Dim str1 As String = "String one"
Dim str2 As String = str1
Dim str3 As String = "String three"
Dim str4 As String = str3

If String.Compare(str1, str2) = 0 And String.Compare(str3, str4) = 0 Then
    MessageBox.Show("str1 = str2 And str3 = str4")
Else
    MessageBox.Show("Else")
End If

编辑:如果要执行不区分大小写的搜索,可以使用StringComparison 参数:

If String.Compare(str1, str2, StringComparison.InvariantCultureIgnoreCase) = 0 And String.Compare(str3, str4, StringComparison.InvariantCultureIgnoreCase) = 0 Then

【讨论】:

  • 这个答案过于复杂。如果情况很重要,只需执行“str1 = str2”。要忽略大小写,请执行“String.Equals(str1, str2, StringComparison.InvariantCultureIgnoreCase)”。或者任何适合您的任务的 StringComparison 变体。无需使用Compare,这会使代码与= 0 混淆。并且需要读者多思考一下代码的意图。 Equals 使意图显而易见。只有在需要0 以外的值(排序)时,我才会使用Compare
  • 有趣的是,String.Compare(str1, str2) 在相等时转换为 False,而在不相等时转换为 True
  • @Panzercrisis 你在告诉我!我没有对这个答案进行足够的阅读,并且做了很多 = 1 的思考 = 1 次转换为 True...我将采纳 ToolmakerSteve 的关于使用 Equals 进行整理的建议。我不认为这像你说的那样“有趣”,如果你以前编码过,我认为它非常混乱和不直观,其中 0 = false 和 1 = true 在几乎所有情况下。
  • 它没有什么有趣或令人困惑的地方。 String.Compare(str1, str2) 不返回 Boolean0 不代表 False1 不代表 TrueString.Compare 返回一个Integer:如果str1 按字母顺序在str2 之前,则小于零,如果str2 按字母顺序在str1 之前,则大于零,如果字符串相同,则为零。 String.Compare 的返回值永远不应转换为 Boolean。如果你想要Boolean,请使用String.Equals,它会返回Boolean
【解决方案2】:

在 vb.net 中,您实际上可以将字符串与= 进行比较。尽管String 是一个引用类型,但在vb.net 中String 上的= 已被重新定义,以便对两个字符串的内容 进行区分大小写的比较。

您可以使用以下代码对此进行测试。请注意,我从用户输入中获取了其中一个值,以确保编译器不能像 Java 编译器那样对两个变量使用相同的引用,如果变量是从相同的字符串 Literal 定义的。运行程序,输入“This”并按

Sub Main()
    Dim a As String = New String("This")
    Dim b As String

    b = Console.ReadLine()

    If a = b Then
        Console.WriteLine("They are equal")
    Else
        Console.WriteLine("Not equal")
    End If
    Console.ReadLine()
End Sub

【讨论】:

  • 甚至使用stringA <> stringB 来确保它们不同。不确定它是否可取,但它似乎工作正常。
【解决方案3】:
Dim MyString As String = "Hello World"
Dim YourString As String = "Hello World"
Console.WriteLine(String.Equals(MyString, YourString))

返回一个布尔值 True。此比较区分大小写。

所以在你的例子中,

if String.Equals(string1, string2) and String.Equals(string3, string4) then
  ' do something
else
  ' do something else
end if

【讨论】:

  • 仅供参考,它工作正常 - 我一直在使用它。尽管在 vb.net 和更新版本中,通常会使用“AndAlso”而不是“And”,仅在必要时进行第二次比较(“短路评估”)。
  • 使用String.Equals 而不是= 的主要优势是什么?我知道你只能使用第一个回调,但我想知道是否还有更多?
【解决方案4】:

我知道这已经得到解答,但是在 2013 年以上的 VB.net(我个人使用过的最低版本)中,您可以将字符串与 = 运算符进行比较。这是最简单的方法。

所以基本上:

If string1 = string2 Then
    'do a thing
End If

【讨论】:

    【解决方案5】:

    我认为这个 String.Equals 是你需要的。

    Dim aaa = "12/31"
                Dim a = String.Equals(aaa, "06/30")
    

    a 将返回 false。

    【讨论】:

      【解决方案6】:
      If String.Compare(string1,string2,True) Then
      
          'perform operation
      
      EndIf
      

      【讨论】:

      • 这似乎没有几年前接受的答案那么详细。发布它有什么特别的理由吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多