2014-04-19 2 views
0

Je veux compter, combien de fois j'ai \r\r dans une variable de chaîne.Compter les nombres de r r dans une chaîne

Par exemple:

string sampleString = "9zogl22n\r\r\nv4bv79gy\r\r\nkaz73ji8\r\r\nxw0w91qq\r\r\ns05jxqxx\r\r\nw08qsxh0\r\r\nuyggbaec\r\r\nu2izr6y6\r\r\n106iha5t\r"; 

Le résultat serait dans cet exemple 8.

+0

http://stackoverflow.com/a/541994/3383479 –

Répondre

-1

Vous pouvez écrire une méthode simple d'extension pour que:

public static int LineFeedCount(this string source) 
{ 
    var chars = source.ToCharArray(); 

    bool found = false; 
    int counter = 0; 
    int count = 0; 
    foreach(var ch in chars) 
    { 
     if (ch == '\r') found = true; 
     else found = false; 

     if (found) counter++; 
     else counter = 0; 

     if(counter != 0 && counter%2 == 0) count++; 
    } 
    return count; 
} 

Ensuite, utilisez il:

int count = inputString.LineFeedCount(); 
0

Vous pouvez utiliser LINQ pour sélectionner toutes les positions où \r\r départ et les compter:

Enumerable.Range(0, s.Length).Where(idx => s.IndexOf(@"\r\r", idx)==idx).Count(); 

Remarque que "\r\r\r" renverra 2 dans le code ci-dessus ...

+0

Vous n'avez pas besoin d'utiliser .Where() et ensuite .Count(). La méthode .Count() elle-même a une surcharge avec un prédicat. Voir: http://msdn.microsoft.com/en-us/library/vstudio/bb535181(v=vs.110).aspx –

6

Vous pouvez utiliser une expression régulière:

var res = Regex.Matches(s, "\r\r").Count; 


Ou une boucle sur la chaîne:

var res = 0; 
for (int i = 0; i < str.Length - 1; i++) 
    if(s[i] == '\r' && s[i + 1] == '\r') 
     res++; 
1

Essayer cette méthode:

public static int CountStringOccurrences(this string text, string pattern) 
{ 
    int count = 0; 
    int i = 0; 
    while ((i = text.IndexOf(pattern, i)) != -1) 
    { 
     i += pattern.Length; 
     count++; 
    } 
    return count; 
} 

Utilisation:

int doubleLinefeedCount = sampleString.CountStringOccurrences("\r\r"); 
0

Vous pouvez utiliser l'astuce de diviser la chaîne avec votre recherche charachter \ r \ r: (ce n'est pas vraiment efficace _ nous avons besoin pour allouer 2 tableaux de chaînes _ mais je le poste comme solution possible, en particulier si les jetons séparés vous intéressent)

"9zogl22n\r\r\nv4bv79gy\r\r\nkaz73ji8\r\r\nxw0w91qq\r\r\ns05jxqxx\r\r\nw08qsxh0\r\r\nuyggbaec\r\r\nu2izr6y6\r\r\n106iha5t\r".Split(new string[] {"\r\r"}, StringSplitOptions.None).Length - 1) 
Questions connexes