how to find the number of occurrences of a substring within a string vb.net

后端 未结 12 1943
逝去的感伤
逝去的感伤 2020-12-06 02:14

I have a string (for example: \"Hello there. My name is John. I work very hard. Hello there!\") and I am trying to find the number of occurrences of the string

相关标签:
12条回答
  • 2020-12-06 02:45

    Yet another idea:

    Dim input As String = "Hello there. My name is John. I work very hard. Hello there!"
    Dim phrase As String = "Hello there"
    Dim Occurrences As Integer = (input.Length - input.Replace(phrase, String.Empty).Length) / phrase.Length
    

    You just need to make sure that phrase.Length > 0.

    0 讨论(0)
  • 2020-12-06 02:45
    str="Thisissumlivinginsumgjhvgsum in the sum bcoz sum ot ih sum"
    b= LCase(str)
    array1=Split(b,"sum")
    l=Ubound(array1)
    msgbox l
    

    the output gives u the no. of occurences of a string within another one.

    0 讨论(0)
  • 2020-12-06 02:47

    I don't know if this is more obvious? Starting from the beginning of longString check the next characters up to the number characters in phrase, if phrase is not found start looking from the second character etc. If it is found start agin from the current position plus the number of characters in phrase and increment the value of occurences

     Module Module1
    Sub Main()
    
        Dim longString As String = "Hello there. My name is John. I work very hard. Hello there! Hello therehello there"
    
        Dim phrase As String = "hello There"
    
    
        Dim occurences As Integer = 0
        Dim n As Integer = 0
    
        Do Until n >= longString.Length - (phrase.Length - 1)
            If longString.ToLower.Substring(n, phrase.Length).Contains(phrase.ToLower) Then
                occurences += 1
                n = n + (phrase.Length - 1)
            End If
            n += 1
        Loop
        Console.WriteLine(occurences)
    
    
    End Sub
    End Module
    
    0 讨论(0)
  • 2020-12-06 02:50

    You can create a Do Until loop that stops once an integer variable equals the length of the string you're checking. If the phrase exists, increment your occurences and add the length of the phrase plus the position in which it is found to the cursor variable. If the phrase can not be found, you are done searching (no more results), so set it to the length of the target string. To not count the same occurance more than once, check only from the cursor to the length of the target string in the Loop (strCheckThisString).

        Dim input As String = "hello there. this is a test. hello there hello there!"
        Dim phrase As String = "hello there"
        Dim Occurrences As Integer = 0
    
        Dim intCursor As Integer = 0
        Do Until intCursor >= input.Length
    
            Dim strCheckThisString As String = Mid(LCase(input), intCursor + 1, (Len(input) - intCursor))
    
            Dim intPlaceOfPhrase As Integer = InStr(strCheckThisString, phrase)
            If intPlaceOfPhrase > 0 Then
    
                Occurrences += 1
                intCursor += (intPlaceOfPhrase + Len(phrase) - 1)
    
            Else
    
                intCursor = input.Length
    
            End If
    
        Loop
    
    0 讨论(0)
  • 2020-12-06 02:51

    You could create a recursive function using IndexOf. Passing the string to be searched and the string to locate, each recursion increments a Counter and sets the StartIndex to +1 the last found index, until the search string is no longer found. Function will require optional parameters Starting Position and Counter passed by reference:

    Function InStrCount(ByVal SourceString As String, _
                        ByVal SearchString As String, _
                        Optional ByRef StartPos As Integer = 0, _
                        Optional ByRef Count As Integer = 0) As Integer
        If SourceString.IndexOf(SearchString, StartPos) > -1 Then
            Count += 1
            InStrCount(SourceString, _
                       SearchString, _
                       SourceString.IndexOf(SearchString, StartPos) + 1, _
                       Count)
        End If
        Return Count
    End Function
    

    Call function by passing string to search and string to locate and, optionally, start position:

    Dim input As String = "Hello there. My name is John. I work very hard. Hello there!"
    Dim phrase As String = "hello there"
    Dim Occurrences As Integer
    
    Occurrances = InStrCount(input.ToLower, phrase.ToLower)
    

    Note the use of .ToLower, which is used to ignore case in your comparison. Do not include this directive if you do wish comparison to be case specific.

    0 讨论(0)
  • 2020-12-06 02:52

    You just have to change the input of the split function into a string array and then delare the StringSplitOptions.

    Try out this line of code:

    Occurrences = input.Split({phrase}, StringSplitOptions.None).Length
    

    I haven't checked this, but I'm thinking you'll also have to account for the fact that occurrences would be too high due to the fact that you're splitting using your string and not actually counting how many times it is in the string, so I think Occurrences = Occurrences - 1

    Hope this helps

    0 讨论(0)
提交回复
热议问题