如何从 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 将找到您要查找的字母的所有索引并将它们放入列表索引中。
我正在用 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 将找到您要查找的字母的所有索引并将它们放入列表索引中。