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

时间:2016-09-28 15:47:30

标签: vb.net if-statement indexof select-case

我在Visual Basic中做Hangman游戏。我正在寻找在TextBox中键入一个字母并单击按钮来结帐。如果那个字母在String中,它将返回位置,但是当这个单词有两个匹配时......我怎么能这样做?

下一个代码只返回第一个匹配,我的意思是,只返回第一个" 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

感谢您的帮助

编辑:对不起,我没有说出来,我不能使用数组。

3 个答案:

答案 0 :(得分:0)

因为你看起来不太了解这种语言。我会给你一个可以帮助你的样本。

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

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

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

答案 1 :(得分:0)

将此功能添加到您的代码中:

 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将找到您要查找的字母的所有索引,并将它们放入索引列表中。

答案 2 :(得分:-1)

将您的字符串放入数组并循环遍历每个字母。当匹配时返回位置但继续循环直到你完成整个阵列。