OVH Cloud OVH Cloud

Fréquence de répétition - string

3 réponses
Avatar
Alex St-laurent
En C#, dans une variable de type string, j'aimerait savoir combien de fois
revien un certain caractère, par exemple "e". quelqu'un connait-il une façon
simple de le savoir ?

Merci

3 réponses

Avatar
Zoury
Salut Alex! :O)

si tu ne veux pas te casser la tête, tu peux essayer quelque chose du genre
:
'***
String s = "abcde fgeij";
Console.WriteLine(Regex.Split(s, "e").Length - 1);
'***

mais je serais curieux de comparé la vitesse d'exécution de cette méthode à
une boucle standard.. surtout sur de longues chaines..

ex (traduit de VB.NET sans retesté..) :
//***
// Compte le nombre de fois que l'on retrouve expr1 dans expr2
public Int32 StrCount(string expr1, string expr2, bool caseSensitive)
{

//Vérifie si les chaines ne sont pas null ou vides
if ((expr1 == null) || (expr2 == null) || (expr1.Length == 0) ||
(expr2.Length = 0))
return;

Int32 nLen1 = expr1.Length;
Int32 nLen2 = expr2.Length;
Int32 nCount = 0;

if (!caseSensitive)
{
expr1 = expr1.ToLower();
expr2 = expr2.ToLower();
}

// Boucle expr2
for (Int32 i = 0; i <= nLen1 - nLen2; i++)
if (expr2 == expr1.Substring(i, nLen2))
nCount++;

return nCount;
}
//***

Note qu'avec les 2 méthodes tu peux chercher une suite de caractère entières
et non juste une lettre.

--
Cordialement
Yanick
MVP pour Visual Basic

"Alex St-laurent" a écrit dans le
message de news:
En C#, dans une variable de type string, j'aimerait savoir combien de fois
revien un certain caractère, par exemple "e". quelqu'un connait-il une


façon
simple de le savoir ?

Merci


Avatar
Alex St-laurent
Merci Zoury!

J'ai finalement opter pour une boucle assez standart en utilisant la méthode
indexOf(). Je recherchait le caractère "(". voici ce que ça donne :

while(indexParentheseOuverte != -1)
{
if(indexParentheseOuverte != -1 &&indexParentheseOuverte <=
ligneFichierCs.Length -1)
{
nbParentheseOuverte++;
indexParentheseOuverte =
ligneFichierCs.IndexOf("(",indexParentheseOuverte+1);
}

en initialisant nbParentheseOuverte à -1 et indexParentheseOuverte à 0 je
me retrouve finalement avec le nombre exact de "(" dans ma chaine.

"Zoury" wrote:

Salut Alex! :O)

si tu ne veux pas te casser la tête, tu peux essayer quelque chose du genre
:
'***
String s = "abcde fgeij";
Console.WriteLine(Regex.Split(s, "e").Length - 1);
'***

mais je serais curieux de comparé la vitesse d'exécution de cette méthode à
une boucle standard.. surtout sur de longues chaines..

ex (traduit de VB.NET sans retesté..) :
//***
// Compte le nombre de fois que l'on retrouve expr1 dans expr2
public Int32 StrCount(string expr1, string expr2, bool caseSensitive)
{

//Vérifie si les chaines ne sont pas null ou vides
if ((expr1 == null) || (expr2 == null) || (expr1.Length == 0) ||
(expr2.Length = 0))
return;

Int32 nLen1 = expr1.Length;
Int32 nLen2 = expr2.Length;
Int32 nCount = 0;

if (!caseSensitive)
{
expr1 = expr1.ToLower();
expr2 = expr2.ToLower();
}

// Boucle expr2
for (Int32 i = 0; i <= nLen1 - nLen2; i++)
if (expr2 == expr1.Substring(i, nLen2))
nCount++;

return nCount;
}
//***

Note qu'avec les 2 méthodes tu peux chercher une suite de caractère entières
et non juste une lettre.

--
Cordialement
Yanick
MVP pour Visual Basic

"Alex St-laurent" a écrit dans le
message de news:
> En C#, dans une variable de type string, j'aimerait savoir combien de fois
> revien un certain caractère, par exemple "e". quelqu'un connait-il une
façon
> simple de le savoir ?
>
> Merci





Avatar
Zoury
> J'ai finalement opter pour une boucle assez standart en utilisant la


méthode
indexOf().



Bonne idée. Je ne me souvenais plus du deuxième paramètre d'IndexOf() qui
permet de préciser la position de départ. C'est possiblement plus rapide que
Substring(). faudrait testé.. (mais j'ai pas le temps :O/)


--
Cordialement
Yanick
MVP pour Visual Basic