如何使用Dart计算字符串中某个字母的数量?

28
我正在尝试计算句子"Hello Jordania"中有多少个字母"a"。
我找到了函数"contains()"。我正在这样使用它:
var phrase = "Hello Jordania";
var comptenbrdea = phrase.contains('a');
print(comptenbrdea);

我们知道,我得到了一个“True”的响应。我找不到正确的函数来计算我得到字母“a”的次数。如果我可以检查每个字符,我可能可以用循环来做点什么?我对this感到困惑。

核选项:使用正则表达式删除除了 a 以外的所有内容,然后获取剩余部分的长度。 - Marc B
我发现这个函数:Map<String, int> 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
6个回答

78

这是一种简单的方法:

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

编辑:测试的字符串是参数,而不是要计数的字符。


1
我一开始没想明白为什么这个不起作用,后来才意识到我在我的用例中已经交换了类似于'a''Hello Jordania'的等价物。对于我来说,在allMatches中首先放置模式,然后再放置要搜索的内容的顺序似乎是相反的。 - Luke Hutchison
1
我也被这个问题困扰过。感谢@LukeHutchison的评论,帮助我立即解决了这个问题。 - NeverEndingQueue

6
void main() {
  const regExp = const RegExp("a");
  print(regExp.allMatches("Hello Jordania").length); // 2
}

3
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);
}

3
为你的答案添加解释。 - Aksen P

2

你需要迭代字符并计数,你上面的评论包含了一个构建直方图的通用函数,但只计算 'a' 的版本可能适合你编写。我将向你展示如何循环遍历字符:

var myString = "hello";
for (var char in myString.splitChars()) {
  // do something
}

1

可能不是最好的方法,但你也可以像这样做。

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

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

你需要减去1,因为它首先拆分成一个列表,然后计算该列表的大小。

-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]}");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接