私は何が間違っているのですか?
あなたは2番目を見つけていますa
。私はあなたがこれについて考えていたと思います:
checkme.IndexOf("a", checkme.IndexOf("a", 3))
それは実際にあなたに正しい結果を与えるでしょう。(「3番目の文字(たまたまa)以降に発生する最初のaの後に発生する最初のaを見つける」と書かれています)
元のコードには、「最初のaの3つの位置以降に発生する最初のaを検索する」と記載されていましたが、これは2番目のaにのみ到達します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
単一の文字列で3番目を検索すると、a
実際には最初のインデックスが返さa
れます(2番目の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