如何计算字符串中字符出现的频率?

新手上路,请多包涵

我需要编写某种循环来计算字符串中每个字母的出现频率。

例如:“aasjjikkk”会算作 2 个“a”、1 个“s”、2 个“j”、1 个“i”、3 个“k”。最终像这样的 id 最终会出现在一个以角色为键、计数为值的地图中。任何好主意如何做到这一点?

原文由 Bill 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 685
2 个回答

您可以使用 java Map 并将 char 映射到 int 。然后您可以遍历字符串中的字符并检查它们是否已添加到地图中,如果有,您可以增加其值。

例如:

 Map<Character, Integer> map = new HashMap<Character, Integer>();
String s = "aasjjikkk";
for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    Integer val = map.get(c);
    if (val != null) {
        map.put(c, val + 1);
    }
    else {
       map.put(c, 1);
   }
}

最后,您将对遇到的所有字符进行计数,并可以从中提取它们的频率。

或者,您可以使用 Bozho 的解决方案,即使用 Multiset 并计算总出现次数。

原文由 xunil154 发布,翻译遵循 CC BY-SA 4.0 许可协议

一个简洁的方法是:

 Map<Character,Integer> frequencies = new HashMap<>();
for (char ch : input.toCharArray())
   frequencies.put(ch, frequencies.getOrDefault(ch, 0) + 1);

我们使用 for-each 循环遍历每个字符。 frequencies.getOrDefault() 获取值,如果键存在或返回(默认)它的第二个参数。

原文由 Sreekanth 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题