Подсчет вхождений определенных символов в строку - PullRequest
59 голосов
/ 04 марта 2011

Какой самый простой способ подсчитать количество вхождений определенного символа в строку?

То есть мне нужно написать функцию countTheCharacters (), чтобы

str = "the little red hen"
count = countTheCharacters(str,"e") ' Count should equal 4
count = countTheCharacters(str,"t") ' Count should equal 3

Ответы [ 26 ]

66 голосов
/ 04 марта 2011

Самое простое - это просто перебрать символы в строке:

Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
  Dim cnt As Integer = 0
  For Each c As Char In value
    If c = ch Then 
      cnt += 1
    End If
  Next
  Return cnt
End Function

Использование:

count = CountCharacter(str, "e"C)

Другой подход, который почти так же эффективен и дает более короткий код, заключается виспользовать методы расширения LINQ:

Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
  Return value.Count(Function(c As Char) c = ch)
End Function
60 голосов
/ 06 июля 2012

Это простой способ:

text = "the little red hen"
count = text.Split("e").Length -1 ' Equals 4
count = text.Split("t").Length -1 ' Equals 3
31 голосов
/ 11 ноября 2011

Вы можете попробовать это

Dim occurCount As Integer = Len(testStr) - Len(testStr.Replace(testCharStr, ""))
14 голосов
/ 22 июля 2014

Вот простая версия.

text.count(function(x) x = "a")

Выше приведено количество символов в строке.Если вы хотите игнорировать регистр:

text.count(function(x) Ucase(x) = "A")

Или если вы просто хотите посчитать буквы:

text.count(function(x) Char.IsLetter(x) = True)

Дайте ему шанс!

4 голосов
/ 20 мая 2011

Или (в VB.NET):

Function InstanceCount(ByVal StringToSearch As String,
                       ByVal StringToFind As String) As Long
    If Len(StringToFind) Then
        InstanceCount = UBound(Split(StringToSearch, StringToFind))
    End If
End Function
4 голосов
/ 05 февраля 2017

Спасибо, @ guffa . Возможность сделать это в одну строку или даже в более длинном выражении в .NET очень удобна. В этом примере VB.NET подсчитывается количество символов LineFeed:

Dim j As Integer = MyString.Count(Function(c As Char) c = vbLf)

j возвращает количество LineFeeds в MyString.

3 голосов
/ 19 октября 2011

Преобразование кода Уджвала Манандхара в VB.NET следующим образом ...

Dim a As String = "this is test"
Dim pattern As String = "t"
Dim ex As New System.Text.RegularExpressions.Regex(pattern)
Dim m As System.Text.RegularExpressions.MatchCollection
m = ex.Matches(a)
MsgBox(m.Count.ToString())
2 голосов
/ 09 октября 2012
Public Class VOWELS

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim str1, s, c As String
        Dim i, l As Integer
        str1 = TextBox1.Text
        l = Len(str1)
        c = 0
        i = 0
        Dim intloopIndex As Integer
        For intloopIndex = 1 To l
            s = Mid(str1, intloopIndex, 1)
            If (s = "A" Or s = "a" Or s = "E" Or s = "e" Or s = "I" Or s = "i" Or s = "O" Or s = "o" Or s = "U" Or s = "u") Then
                c = c + 1
            End If
        Next
        MsgBox("No of Vowels: " + c.ToString)
    End Sub
End Class
2 голосов
/ 16 июня 2012
Public Function CountOccurrences(ByVal StToSerach As String, ByVal StToLookFor As String) As Int32

    Dim iPos = -1
    Dim iFound = 0
    Do
        iPos = StToSerach.IndexOf(StToLookFor, iPos + 1)
        If iPos <> -1 Then
            iFound += 1
        End If<br/>
    Loop Until iPos = -1
    Return iFound
End Function

Использование кода:

Dim iCountTimes As Integer = CountOccurrences("Can I call you now?", "a")

Также вы можете иметь его как расширение:

<Extension()> _
Public Function CountOccurrences(ByVal StToSerach As String, ByVal StToLookFor As String) As Int32
    Dim iPos = -1
    Dim iFound = 0
    Do
        iPos = StToSerach.IndexOf(StToLookFor, iPos + 1)
        If iPos <> -1 Then
            iFound += 1
        End If
    Loop Until iPos = -1
    Return iFound
End Function

Использование кода:

Dim iCountTimes2 As Integer = "Can I call you now?".CountOccurrences("a")
2 голосов
/ 09 октября 2012

Когда я нашел это решение, я искал что-то немного другое, так как строка, которую я хотел сосчитать, была длиннее одного символа, поэтому я придумал это решение:

    Public Shared Function StrCounter(str As String, CountStr As String) As Integer
        Dim Ctr As Integer = 0
        Dim Ptr As Integer = 1
        While InStr(Ptr, str, CountStr) > 0
            Ptr = InStr(Ptr, str, CountStr) + Len(CountStr)
            Ctr += 1
        End While
        Return Ctr
    End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...