我究竟做错了什么?
你正在寻找第二个a
. 我猜你在想这个:
checkme.IndexOf("a", checkme.IndexOf("a", 3))
这实际上会给你正确的结果。(它说“查找出现在第一个 a 之后出现的第一个 a,该 a 出现在第三个字符上或之后(恰好是 a)”)
您的原始代码说“找到第一个 a 出现在第一个 a 之后的 3 个位置上或之后”,这只会让您到达第二个a
。
我如何解决它?
您可以在IndexOf
循环中使用,将最后找到的索引重新用作下一个开始索引。
Shared Public Function FindIndexOfNthChar(ByVal checkme as String, _
ByVal checkChar as Char, _
ByVal n as Integer) as Integer
Dim lastIndex As Integer = -1
For i As Integer = 1 To n
lastIndex = checkme.IndexOf(checkChar, lastIndex + 1)
If lastIndex = -1 Then Return -1
Next i
Return lastIndex
End Function
你必须要小心; 如果您不检查-1
每次尝试并立即退出,您可能会得到错误的结果。
如果您忘记了这一点(正如其他一些帖子似乎有),那么如果您a
在一个字符串中搜索第三个,那么a
您实际上将返回第一个的索引a
(当您尝试找到第二个 a 时,您'会将您的索引重置为-1
,这实际上是重新开始搜索)
出于这个原因,仅仅写下你的意思可能会更清楚:
Shared Public Function FindIndexOfNthChar(ByVal checkme as String, _
ByVal checkChar as Char, _
ByVal n as Integer) as Integer
Dim count as Integer = 0
For i as Integer = 0 To checkme.Length - 1
If(checkme(i) = checkChar) Then
count += 1
If(count = n) Then Return i
End If
Next i
return -1
End Function