【问题标题】:InStr array is in stringInStr 数组在字符串中
【发布时间】:2017-10-10 07:26:39
【问题描述】:

目前我正在使用 InStr 在字符串中查找字符串,我是 VB.NET 的新手,想知道是否可以使用 InStr 来搜索字符串中数组的每个元素,或者类似这样的函数:

InStr(string, array)

谢谢。

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    你需要循环:

    Dim bFound As Boolean = False
    For Each elem As String In array
        If myString.Contains(elem) Then
            bFound = True
            Exit For
        End If
    Next
    

    你可以把它转换成一个函数来方便地多次调用它:

    Public Function MyInStr(myString As String, array() As String) As Boolean
        For Each elem As String In array
            If myString.Contains(elem) Then return True
        Next
    
        return false
    End Function
    

    然后:

    MyInStr("my string text", New String() {"my", "blah", "bleh"})
    

    【讨论】:

    • @XandrUu 你有一个错字。应该是布尔值
    • 这是代码:Dim accesFile As Boolean and get error at As
    • 它是 asp-classic 并找到应该说 accesFile = False 的问题,但现在我在 For Each 循环中收到错误,sintax 是“For Each file In Session("AccessFiles")”
    • 那里没有“问题”,Dim myVar As Type 在 VB.NET 中是完全正确的,因此您的平台中有一些奇怪的东西。也许你在谈论 javascript?
    【解决方案2】:

    这是 LINQ 解决方案:

    Dim a() = {"123", "321", "132"}
    Dim v = a.Select(Function(x) InStr(x, "3")).ToArray
    MessageBox.Show(String.Join(",", v)) '3,1,2
    

    【讨论】:

    • 我建议在 VB.NET 中使用x.IndexOf,而不是旧的InStr 函数。
    • @StevenDoggart:好主意。幸运的是,上面的代码支持自定义,所以 OP 可以使用那里的任何功能。
    【解决方案3】:

    将 SysDragon 的答案转换为经典的 asp:

    你需要循环:

    Dim bFound
    bFound = False
    
    For Each elem In myArray
        If InStr(myString, elem)>=0 Then
            bFound = True
            Exit For
        End If
    Next
    

    你可以把它转换成一个函数来方便地多次调用它:

    Function MyInStr(myString, myArray)
        Dim bFound
        bFound = false
    
        For Each elem In myArray
            If InStr(myString, elem)>=0 Then
                bFound = True
                Exit For
            End If
        Next
    
        MyInStr = bFound
    End Function
    

    然后:

    MyInStr("my string text", Array("my", "blah", "bleh"))
    

    【讨论】:

      【解决方案4】:

      如果您正在寻找在字符串数组中的任何项目中搜索字符串,那么您可以使用array.find(<T>) 方法。在此处查看更多信息:http://msdn.microsoft.com/en-IN/library/d9hy2xwa%28v=vs.90%29.aspx

      【讨论】:

        【解决方案5】:

        Instr 返回一个整数,指定一个字符串在另一个字符串中第一次出现的起始位置。

        参考this

        要在字符串中查找字符串,您可以使用其他方法

        这是一个同时突出显示您搜索的所有文本的示例,但如果这不是您想要的,您必须自己解决。

        Sub findTextAndHighlight(ByVal searchtext As String, ByVal rtb As RichTextBox)
        Dim textEnd As Integer = rtb.TextLength
        Dim index As Integer = 0
        Dim fnt As Font = New Font(rtb.Font, FontStyle.Bold)
        Dim lastIndex As Integer = rtb.Text.LastIndexOf(searchtext)
        While (index < lastIndex)
          rtb.Find(searchtext, index, textEnd, RichTextBoxFinds.WholeWord)
          rtb.SelectionFont = fnt
          rtb.SelectionLength = searchtext.Length
          rtb.SelectionColor = Color.Red
          rtb.SelectionBackColor = Color.Cyan
          index = rtb.Text.IndexOf(searchtext, index) + 1
        End While
        End Sub
        

        此方法在 RichTextBox2 中搜索文本“男孩”,将文本颜色更改为红色,并将背景颜色更改为青色

         Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
         findTextAndHighlight("boy", RichTextBox2)   
         End Sub
        

        【讨论】:

        • 如果您可以将示例和信息直接包含在您的答案中,那就更好了。除此之外提供一个链接很好,但如果一个链接是你答案中唯一的东西,如果链接被破坏,你的答案对未来的访问者将毫无用处。
        • @Steven Doggart,感谢您的有用建议。我会更新我的答案
        • 此链接似乎不再正常工作。另请记住,许多没有国际分支机构的美国公司很可能会预先阻止非美国的 IP 连接,因此请记住阅读本文的人。
        猜你喜欢
        • 2016-09-11
        • 2012-02-14
        • 2014-07-22
        • 2012-08-20
        • 2023-02-25
        • 2014-03-31
        • 1970-01-01
        • 2018-04-11
        • 2011-01-02
        相关资源
        最近更新 更多