【问题标题】:How to ignorecase when using string.text.contains?使用 string.text.contains 时如何忽略大小写?
【发布时间】:2012-12-28 03:23:18
【问题描述】:

我试图弄清楚如何使用 .text.contains 来检查一个字符串是否包含另一个字符串。

就目前而言,如果我这样做:

 Dim myhousestring As String = "My house is cold"
    If txt.Text.Contains(myhousestring) Then
    Messagebox.Show("Found it")
    End If

只有在完全相同的情况下才会返回匹配项。因此,如果用户键入“我的房子很冷”,则不会匹配。

我该怎么做?如果不可能,我可能只使用正则表达式而不是忽略大小写。任何帮助将不胜感激。

【问题讨论】:

    标签: .net vb.net string


    【解决方案1】:

    根据Microsoft,您可以使用IndexOf 而不是Contains 在字符串中进行不区分大小写的搜索。所以当IndexOf方法的结果返回一个大于-1的值时,说明第二个字符串是第一个字符串的子字符串。

    Dim myhousestring As String = "My house is cold"
    If txt.Text.IndexOf(myhousestring, 0, StringComparison.CurrentCultureIgnoreCase) > -1 Then
        Messagebox.Show("Found it")
    End If
    

    您还可以使用StringComparison 的其他不区分大小写的变体。

    【讨论】:

    • 啊,这正是我想要的。我知道他们是另一种可用于比较字符串的字符串方法。非常感谢。我很感激。
    【解决方案2】:

    我不是vb.net程序员,但根据Microsoft,可以使用字符串方法ToUpper()ToLower()获取文本的小写/大写值。然后,您可以将其与 "my house is cold""MY HOUSE IS COLD" 进行比较。

    Dim myhousestring As String = "MY HOUSE IS COLD"
    If txt.Text.ToUpper.Contains(myhousestring) Then
        Messagebox.Show("Found it")
    End If
    

    【讨论】:

    • 我更喜欢这个解决方案。
    • 这会导致全球化问题,特别是土耳其语 i。我会小心这种方法。
    【解决方案3】:

    我个人只是用过:

    item.Text.ToLower().Contains("my house is cold")
    

    您也可以使用 ToUpper。

    警告:如果您要比较土耳其语或其他语言,ToLower() 和 ToUpper() 还带有一个选项参数,用于“CultureInfo”,允许您确保正确处理不同的语言。 您可以使用上述解决方案,或者您可以按照 Microsoft 的 ToLower 文档中的步骤添加 CultureInfo,以获取您将要尝试操作的语言的 ToLower 上下文。

    ToLower() with CultureInfo documentation

    ToUpper() with CultureInfo documentation

    【讨论】:

    • 这会导致全球化问题,特别是土耳其语 i。我会小心这种方法。
    • 问题似乎没有提到它需要支持土耳其语...尤其是当我们将文本与英语进行比较时...文化冷漠比较不会从土耳其语翻译到英文,然后比较,就是比较字符。
    【解决方案4】:

    我用 .toUpper 解决了这个问题

    例如:

    Dim UGroup as String = dr.Item(2).ToString().ToUpper
    Dim s as String = ds.Item(1).ToString.ToUpper
    
    If s.Contains(UGroup) then MsgBox("Well done!")
    Else 
    End Sub
    

    与 .toLower 的过程相同

    【讨论】:

    • 对不起,这是一个德语单词。逗号是逗号的意思。所以“,”这仅在我的代码中很重要。但我删除了它以免造成混乱。
    • Danke für das +1!我的意思是:感谢您的 +1
    【解决方案5】:

    这就是我解决 String.Contains 不区分大小写问题的方法。

    Dim s as string = "My HoUsE iS cOlD".ToUpper
    
    If s.Contains("MY HOUSE IS COLD") Then Exit Sub
    

    对于我的特定问题,我正在检查的字符串位于 TextBox 中。

    我希望这会有所帮助。

    【讨论】:

      【解决方案6】:

      或者你可以像这样使用正则表达式。

      首先,导入正则表达式:

      Imports System.Text.RegularExpressions
      

      然后试试这个代码:

      Dim match As Match = Regex.Match(Textbox1.text,"My house is cold",RegexOptions.IgnoreCase)
      If match.Success Then
         Msgbox(match.Value)
      End If
      

      【讨论】:

      • 这看起来有点矫枉过正
      【解决方案7】:

      这个怎么样?

      <Runtime.CompilerServices.Extension>
      Function InStr(s As String, find As String) As Boolean
          Return s.ToLower.Contains(find.ToLower)
      End Function
      

      【讨论】:

        【解决方案8】:

        使用 InStr 示例。如果以太比较什么都不是,“包含”会失败。

        '如果我们发现了什么......

        If InStr(1, value, search, vbTextCompare) > 0 Then
        
        Beep
        
        End If   
        
                                                       '
        

        【讨论】:

        • 在这种情况下不需要 InStr 的第一个参数,您可能希望将输入参数与问题相匹配。根据 MSDN,我也不认为这是不区分大小写的?
        【解决方案9】:

        我使用下面的代码来搜索/确认 TEXTBOX1 中的字符串是否在“c:\testsearch.txt”中。

            Imports System.IO
        
        Private Function sinf(path As String, match As String) As Boolean 
            Dim s As String = File.ReadAllText(path).ToLower
            Return s.Contains(match.ToLower)
        End Function
        
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim st As String
            st = TextBox1.Text
            If sinf("c:\testsearch.txt", st) = True Then 
                MsgBox("Found if")
            Else
                MsgBox("Try again")
            End If
        End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-28
          相关资源
          最近更新 更多