一、问题描述
手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出。提示(可以用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