25

I try to calculate how many letter "a" i have in the sentence: "Hello Jordania".

I find the function contains. I using it like this:

  var phrase = "Hello Jordania;
  var comptenbrdea = phrase.contains('a');
  print(comptenbrdea);

I get "True" as response. Normal you will say, I know, but I dont find the right function to calculate how many time i get an a. I can maybe do something with a loop if I can check every single character? ... I'm lost on http://www.dartlang.org/search.html?cx=011220921317074318178%3Ai4mscbaxtru&ie=UTF-8&hl=en&q=string_scanner ... Can some one help me ?

Peter
  • 1,719
  • 4
  • 22
  • 31
  • nuclear option: use regex to remove everything that ISN'T an `a`, then get the length of whatever remains. – Marc B Oct 28 '12 at 16:25
  • I find thise function : Map letterFrequency(String text) { String textWoutSpaces = text.replaceAll('\n', ''). replaceAll(' ', '').replaceAll('.', ''); List charList = textWoutSpaces.splitChars(); charList.sort((m,n) => m.compareTo(n)); var charMap = {}; for (var char in charList) { if(char == 'o'){ charMap[char] = charMap.putIfAbsent(char, () => 0) + 1; } } return charMap; } – Peter Oct 28 '12 at 16:41

6 Answers6

73

Here's a simple way to do it:

void main() {
  print('a'.allMatches('Hello Jordania').length); // 2
}

Edit: the tested string is the parameter, not the character to be counted.

Seb
  • 85
  • 1
  • 9
Kai Sellgren
  • 27,954
  • 10
  • 75
  • 87
  • 1
    I couldn't figure out why this wasn't working, then I realized that I had switched the equivalent of `'a'` and `'Hello Jordania'` for my use case. The correct order of putting the pattern first and the thing to search inside `allMatches` seems backwards to me. – Luke Hutchison Mar 11 '23 at 05:45
  • 1
    Got bitten by this as well. Thanks for your comment @LukeHutchison which helped me to solve this immediately. – Tom Raganowicz Apr 21 '23 at 11:12
5
void main() {
  const regExp = const RegExp("a");
  print(regExp.allMatches("Hello Jordania").length); // 2
}
Peter
  • 1,719
  • 4
  • 22
  • 31
2
void main(){
  String str = "yours string";
  Map<String, int> map = {};
  for(int i = 0; i < str.length; i++){
    int count = map[str[i]] ?? 0;
     map[str[i]] = count + 1;
  }
  print(map);
}
1

You need to iterate on the characters and count them, you comment above contains a general function for building a histogram, but the version that just counts 'a's is probably good for you to write. I'll just show you how to loop over characters:

var myString = "hello";
for (var char in myString.splitChars()) {
  // do something
}
Justin Fagnani
  • 10,483
  • 2
  • 27
  • 37
1

Probably not the best one, but you can also do something like this.

void main() {
  var a = "ht://adfd//.coma/";

  int count = a.split("t").length - 1;
  print(count);
}

You will need to subtract 1 because it is splitting into a list first and then counting the size of that list.

Mithun Adhikari
  • 521
  • 6
  • 13
-1
  // count letters
  Map<int,int> counts = new Map<int,int>();
  for (var c in s.charCodes() ) {
    counts[c] = counts.putIfAbsent(c, p()=>0) + 1;
  }
  // print counts
  for (var c in counts.getKeys())
    print("letter ${new String.fromCharCodes([c])} count=${counts[c]}");
ARA
  • 1,296
  • 10
  • 18