4

これを達成するための専門的な方法は何ですか?

ありがとう。

4

4 に答える 4

7

この質問の例を恥知らずに切り取って、C# から VB.net に変換しました。

Public Function GetNthIndex(s As String, t As Char, n As Integer) As Integer
    Dim count As Integer = 0
    For i As Integer = 0 To s.Length - 1
        If s(i) = t Then
            count += 1
            If count = n Then
                Return i
            End If
        End If
    Next
    Return -1
End Function
于 2012-08-22T17:21:56.253 に答える
6

これがLinqでそれを行う方法です。

Public Function GetNthIndex(searchString As String, charToFind As Char, n As Integer) As Integer
    Dim charIndexPair = searchString.Select(Function(c,i) new with {.Character = c, .Index = i}) _
                                    .Where(Function(x) x.Character = charToFind) _
                                    .ElementAtOrDefault(n-1)
    Return If(charIndexPair IsNot Nothing, charIndexPair.Index, -1)
End Function

使用法:

Dim searchString As String = "Assessment"
Dim index As Integer = GetNthIndex(searchString, "s", 4) 'Returns 5
于 2012-08-22T18:52:30.963 に答える
0

Andew'sの私のバージョンですが、最初のキャラクターが探しているキャラクターである場合、これは考慮に入れられていると思います

 Public Function GetNthIndexStringFunc(s As String, t As String, n As Integer) As Integer
        Dim newFound As Integer = -1
        For i As Integer = 1 To n
            newFound = s.IndexOf(t, newFound + 1)
            If newFound = -1 Then
                Return newFound
            End If
        Next
        Return newFound
    End Function
于 2012-08-22T21:36:20.410 に答える
0

より速くする場合:

Public Function NthIndexOf(s As String, c As Char, n As Integer) As Integer
    Dim i As Integer = -1
    Dim count As Integer = 0

    While count < n AndAlso i >= 0
        i = s.IndexOf(c, i + 1)
        count += 1
    End While

    Return i

End Function

「a」の長い文字列でn番目の「a」を探している場合、Mike Cの回答よりも少し遅くなりますが(たとえば)。

編集:spacemonkeysのコメントに従って調整。

于 2012-08-22T19:48:43.107 に答える