73 votes

Compter les occurrences d'un caractère spécifique dans une chaîne de caractères

Quelle est la manière la plus simple de compter le nombre d'occurrences d'un caractère spécifique dans une chaîne de caractères ?

En d'autres termes, je dois écrire une fonction, countTheCharacters(), de manière à ce que

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

0 votes

La méthode la plus rapide consiste à ne pas utiliser de chaîne de caractères. Si vous êtes vraiment intéressé par la vitesse, vous devriez chercher autre chose.

1 votes

@habakuk, quelle valeur autre qu'une chaîne de caractères l'OP pourrait-il utiliser à la place de "la petite poule rousse" ?

0 votes

@johnywhy pourquoi utiliser un StringBuilder. Voir msdn.microsoft.com/de-de/library/

80voto

Guffa Points 308133

La méthode la plus simple consiste à parcourir en boucle les caractères de la chaîne :

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

Utilisation :

count = CountCharacter(str, "e"C)

Une autre approche, presque aussi efficace et qui permet d'obtenir un code plus court, consiste à utiliser les méthodes d'extension 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

1 votes

Je suis venu ici à la recherche de la le plus rapide mais pas nécessairement la plus élégante. C'est rapide, mais cela peut être accéléré d'environ 10 % en utilisant For i as Integer = 0 to value.Length - 1 au lieu d'une boucle For Each.

0 votes

'Count' is not a member of 'String'.

1 votes

@Panzercrisis : Le Count est une méthode d'extension de la méthode IEnumerable<T> y String met en œuvre IEnumerable<char> . Si vous obtenez une erreur de compilation de ce type, il vous manque le paramètre using System.Linq; en haut de la page.

71voto

Coyolero Points 513

C'est la méthode la plus simple :

text = "the little red hen"
count = text.Split("e").Length -1 ' Equals 4
count = text.Split("t").Length -1 ' Equals 3

2 votes

Cela ne donne pas toujours le nombre correct si la lettre de début et/ou de fin est celle qui doit être comptée

1 votes

@Remonn J'obtiens toujours le bon numéro. La seule façon de ne pas compter les lettres de début et de fin, c'est si vous passez SplitStringOptions.RemoveEmptyEntries comme deuxième paramètre de Split()

1 votes

C'est simple, mais cela crée un tas de chaînes qui ne servent à rien.

34voto

Mark Harris Points 111

Vous pouvez essayer ceci

Dim occurCount As Integer = Len(testStr) - Len(testStr.Replace(testCharStr, ""))

4 votes

Divisez votre réponse par Len(testCharStr) y Ceil de fonctionner de la même manière pour les occurrences de chaînes de caractères.

0 votes

L'avantage de cette méthode est qu'elle utilise des effets très basiques. Pas de LINQ, de RegEx ou d'autres bibliothèques supplémentaires. Elle peut être facilement reproduite dans différents langages.

22voto

MattB Points 460

Voici une version simple.

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

Ce qui précède vous donne le nombre de "a" dans la chaîne de caractères. Si vous voulez ignorer la casse :

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

Ou si vous voulez simplement compter les lettres :

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

Tentez votre chance !

0 votes

Cela ne me semble pas être une solution vb.net.

0 votes

C'est une solution très VB.NET !

0 votes

Échec. Mon VS 2017 n'a pas de .count pour une chaîne de caractères.

5voto

JerryOL Points 432

Ou (en 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X