【问题标题】:VB.NET - If string contains "value1" or "value2"VB.NET - 如果字符串包含“value1”或“value2”
【发布时间】:2011-09-16 05:43:41
【问题描述】:

我想知道如何检查字符串是否包含“value1”或“value2”? 我试过这个:

If strMyString.Contains("Something") Then

End if

这行得通,但这行不通:

If strMyString.Contains("Something") or ("Something2") Then

End if

这给了我无法从字符串转换为 Long 的错误。 如果我将or ("Something2") 放在第一个括号内,则会出现无法将字符串转换为布尔值的错误。

那么如何在不写太多代码的情况下检查字符串是否包含“string1”或“string2”?

【问题讨论】:

    标签: vb.net string if-statement contains


    【解决方案1】:

    有趣的是,此解决方案可能会中断,但有一种解决方法: 正在查找我的名为 KeyWorks.accdb 的数据库,该数据库必须存在:

    运行这个:

    Dim strDataPath As String = GetSetting("KeyWorks", "dataPath", "01", "") 'get from registry
    
    If Not strDataPath.Contains("KeyWorks.accdb") Then....etc.
    

    如果我的数据库被命名为KeyWorksBB.accdbIf 语句将认为这是可接受的并退出If 语句,因为它确实找到了KeyWorksaccdb

    如果我用像'KeyWorks.accdb' 这样的单引号将If 语句限定符括起来,它现在会按顺序查找所有连续字符,并会进入If 块,因为它不匹配。

    【讨论】:

      【解决方案2】:

      我以不同的方式处理了这个问题。我创建了一个函数,它只返回 true 或 false .. 用法:

      如果 FieldContains("A;B;C",MyFieldVariable,True|False) 那么

      .. 做点什么

      如果结束

      Public Function FieldContains(Searchfor As String, SearchField As String, AllowNulls As Boolean) As Boolean
      
             If AllowNulls And Len(SearchField) = 0 Then Return True
      
              For Each strSearchFor As String In Searchfor.Split(";")
                  If UCase(SearchField) = UCase(strSearchFor) Then
                      Return True
                  End If
              Next
      
              Return False
      
          End Function
      

      【讨论】:

      • 而不是组合和切片字符串,如果寻找的字符串之一会偶然失败,为什么不将寻找的值数组作为 params 可变大小的 arg 传递?您将分配更少的对象,分隔符不会出现转义问题,而且速度会更快。
      【解决方案3】:

      你必须这样做:

      If strMyString.Contains("Something") OrElse strMyString.Contains("Something2") Then
          '[Put Code Here]
      End if
      

      【讨论】:

      • 我会继续并将其设置为答案,因为您是新用户:)
      • 我建议使用 Or, OrElse 的短路版本。
      • 对于干净的代码,请删除 strMyString.Contains("Something2")* 末尾的星号
      【解决方案4】:

      这是检查特定字符串是否包含某些预定义字符串的替代解决方案。它使用IndexOf功能:

      'this is your string
      Dim strMyString As String = "aaSomethingbb"
      
      'if your string contains these strings
      Dim TargetString1 As String = "Something"
      Dim TargetString2 As String = "Something2"
      
      If strMyString.IndexOf(TargetString1) <> -1 Or strMyString.IndexOf(TargetString2) <> -1 Then
      
      End If
      

      注意:此解决方案已使用 Visual Studio 2010 进行测试。

      【讨论】:

        【解决方案5】:

        除了已经给出的答案之外,如果您使用 OrElse 而不是 Or 会更快,因为第二个测试是短路的。如果您知道一个字符串比另一个字符串更有可能出现这种情况,则尤其如此,在这种情况下将其放在第一位:

        If strMyString.Contains("Most Likely To Find") OrElse strMyString.Contains("Less Likely to Find") Then
            'Code
        End if
        

        【讨论】:

          【解决方案6】:
           If strMyString.Tostring.Contains("Something") or strMyString.Tostring.Contains("Something2") Then
          
          
               End if
          

          【讨论】:

            【解决方案7】:
            If strMyString.Contains("Something") or strMyString.Contains("Something2") Then
            
            End if
            

            该错误表明编译器认为您想对布尔值和字符串执行按位OR。这当然行不通。

            【讨论】:

              【解决方案8】:

              你需要这个

              If strMyString.Contains("Something") or strMyString.Contains("Something2") Then
                  'Code
              End if
              

              【讨论】:

              • 我不敢相信我没有尝试过这个......而且反应如此之快! :)
              【解决方案9】:

              您有 ("Something2") 本身 - 您需要对其进行测试以便返回一个布尔值:

              If strMyString.Contains("Something") or strMyString.Contains("Something2") Then
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-01-29
                • 2013-03-07
                • 2023-04-05
                • 2020-01-17
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多