一、问题描述
手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出。提示(可以用Map) 实例: 输入:aaabbbccc 输出:
* a 3
* b 3
* c 3
二、算法
1. 由于map存储结构为key-value,所以选择map存储,类型为: <Character,Integer>
2.由结果可知,a,b,c是按照字母顺序输出的,所有用sortedMap,通过看源代码可以知道,在sortedMap中载入比较器,实现了自然顺序排序。
public interface SortedMap<K,V> extends Map<K,V> { Comparator<? super K> comparator();
/** * Gets result map. * @param str * @return */ private Map<Character, Integer> getCountMap(String str) { SortedMap<Character, Integer> countMap = new TreeMap<Character, Integer>(); char[] cellArray = str.toCharArray(); for (int i = 0; i < cellArray.length; i++) { if (countMap.containsKey(cellArray[i])) { countMap.put(cellArray[i], countMap.get(cellArray[i]) + 1); } else { countMap.put(cellArray[i], 1); } } return countMap; } /** * Gets input string * @return */ private String getInputStr() { Scanner cin = new Scanner(System.in); String inputStr = cin.nextLine().trim(); return inputStr; }
public static final String REGEX = "^[a-z]*$"; public static void main(String[] args) { Main6 m = new Main6(); String inputStr = m.getInputStr(); Map<Character, Integer> countMap = null; if (inputStr.matches(REGEX)) { countMap = m.getCountMap(inputStr); for (Map.Entry<Character, Integer> entry : countMap.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } } else { //do exception } }
aaabbbccc a:3 b:3 c:3