如何计算字符串中字符的频率?
我需要编写某种循环来计算字符串中每个字母的频率。
例如:“aasjjikkk”将计算2个“a”,1个“s”,2个“j”,1个“i”,3个“k”。最终,像这样的id最终会以字符作为键,计数作为值的映射结束。任何好主意如何做到这一点?
我需要编写某种循环来计算字符串中每个字母的频率。
例如:“aasjjikkk”将计算2个“a”,1个“s”,2个“j”,1个“i”,3个“k”。最终,像这样的id最终会以字符作为键,计数作为值的映射结束。任何好主意如何做到这一点?
您可以使用 java Map 并将 a 映射到 .然后,您可以循环访问字符串中的字符并检查它们是否已添加到映射中,如果它们已添加到映射中,则可以递增其值。char
int
例如:
HashMap<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, new Integer(val + 1));
}
else {
map.put(c, 1);
}
}
最后,您将获得您遇到的所有字符的计数,您可以从中提取它们的频率。
或者,您可以使用 Bozho 的解决方案,即使用 Multiset 并计算总发生次数。
一种简洁的方法是:
Map<Character,Integer> frequencies = new HashMap<>();
for (char ch : input.toCharArray())
frequencies.put(ch, frequencies.getOrDefault(ch, 0) + 1);
我们使用 for-each 来循环遍历每个字符。如果 key 存在,则 get 值或返回(作为默认值)其第二个参数。frequencies.getOrDefault()