如何从 Visual Basic 中的字符串中获取第二个匹配项?

How to get second match from string on Visual Basic?

我正在用 Visual Basic 做刽子手游戏。我正在寻找在 TextBox 中键入一个字母并单击一个按钮以签出。如果该字母在字符串中,它将位于 return 位置,但是当单词有两个匹配项时...我该怎么做?

下一个代码仅 return 第一个匹配项,我的意思是,仅第一个 "A".

的位置
Dim palabra As String = "PALABRA"

Private Sub BtnComprobar_Click(sender As Object, e As EventArgs) Handles BtnComprobar.Click
    If txtComprobar IsNot "" Then
        Dim letra As String = UCase(txtComprobar.Text)

        If palabra.IndexOf(letra) > -1 Then
            Select Case palabra.IndexOf(letra)
                Case 0
                    Lbl1.Text = letra
                    LblP.ForeColor = Color.Red
                Case 1
                    Lbl2.Text = letra
                    LblA.ForeColor = Color.Red
                Case 2
                    Lbl3.Text = letra
                    LblL.ForeColor = Color.Red
                Case 4
                    Lbl4.Text = letra
                Case 5
                    Lbl5.Text = letra
                    LblB.ForeColor = Color.Red
            End Select
        Else
            errores += 1
            txtErrores.Text = CStr(errores)
        End If
        txtComprobar.Text = ""
    End If
End Sub

感谢您的帮助

编辑:抱歉,我没说,我不会使用数组。

将您的字符串放入一个数组中并遍历每个字母。 Return 匹配时的位置,但继续循环直到遍历整个数组。

因为你看起来不太懂这种语言。我会给你做一个可能对你有帮助的例子。

你可以反过来看你的问题,而不是查看所选字母是否在单词中,而是查看单词的每个字符是否都是所选字母。

If palabra.IndexOf(letra) > -1 Then
    If palabra(0) = letra Then
        Lbl1.Text = letra
    End If

    If palabra(1) = letra Then
        Lbl2.Text = letra
    End If

    If palabra(2) = letra Then
        Lbl3.Text = letra
    End If

    If palabra(3) = letra Then
        Lbl4.Text = letra
    End If

    If palabra(4) = letra Then
        Lbl5.Text = letra
    End If

    If palabra(5) = letra Then
        Lbl6.Text = letra
    End If
Else
    errores += 1
    txtErrores.Text = CStr(errores)
End If

使用标签和循环数组会容易得多。

将此函数添加到您的代码中:

 Public Function GetIndexes(ByVal SearchWithinThis As String, ByVal SearchForThis As String) As List(Of Integer)
        Dim Result As New List(Of Integer)

        Dim i As Integer = SearchWithinThis.IndexOf(SearchForThis)

        While (i <> -1)
            Result.Add(i)
            i = SearchWithinThis.IndexOf(SearchForThis, i + 1)
        End While

        Return Result
    End Function

并在您的代码中调用函数:

Dim Indexes as list(of Integer) = GetIndexes(palabra, letra)

现在 GetIndexes 将找到您要查找的字母的所有索引并将它们放入列表索引中。