为了统计字符串中每种字符出现的频率,使用HashMap这种数据结构。其中,字符作为Key,出现的频率作为Value。
基本算法为:
1. 将字符串分成字符数组
2. (1)如果HashMap中的Key没有正在读取的字符,则会插入一个新的Key,赋值为1。
(2)如果正在读取的字符已经存在于HashMap的Key中,则会将其Value的值+1。
3. 一直读取到字符数组的最后一位形成最终的HashMap。
关于HashMap中getOrDefault(K, V)方法:
如果HashMap中含有方法中的Key值,那么则返回原本HashMap中此Key值所对应的Value值;
相反,如果不包含方法中的Key值的话,则会默认返回方法中规定的Value值。
部分代码如下:
for(char a:word.toCharArray()) { map.put(a,map.getOrDefault(a, 0) + 1); }
如果读取的值在Hashmap中已经存在,则会将getOrDefault(K, V)方法中返回的值+1作为put方法中的Value值覆盖;
如果不存在的话,getOrDefault(K, V)方法则会返回0,后面+1作为第一次读到此Key的频数,即为1。
代码实现如下(包括HashMap内容的遍历输出):
import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class countNumber { public static void main(String[] args) { String word = "banana"; HashMap<Character, Integer> map = new HashMap<Character, Integer>(); for(char a:word.toCharArray()) { map.put(a,map.getOrDefault(a, 0) + 1); } Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object value = entry.getValue(); System.out.println(key + ":" + value); } } }