需求:统计一个字符串中每个字母出现的个数,并以a(1)b(2)c(3)...这样的形式输出
通过结果发现,每一个字母都有对应的次数。
说明字母和数字之间都有映射关系。
因为有映射关系,所以选择了Map集合
又因为字母有排序,所以选择了具有排序功能的TreeMap
import java.util.*;
public class MapTest {
public static void main(String[] args) {
String s = charCount("abdhabahffsd");
System.out.println(s);
}
public static String charCount(String str) {
char[] ch = str.toCharArray();
TreeMap<Character, Integer> treeMap = new TreeMap<Character, Integer>();
int count = 0;
for (int i = 0; i < ch.length; i++) {
Integer value = treeMap.get(ch[i]);
if (value != null) {
count = value;
}
count++;
treeMap.put(ch[i], count);
count=0;
}
/*注释部分为另外一种写法
* for (int i = 0; i < ch.length; i++) {
*
* Integer value = treeMap.get(ch[i]); if (value == null) {
* treeMap.put(ch[i], 1); } else { value = value + 1; treeMap.put(ch[i],
* value); } }
*/
Set<Map.Entry<Character, Integer>> entries = treeMap.entrySet();
Iterator<Map.Entry<Character, Integer>> iterator = entries.iterator();
StringBuilder aBuilder = new StringBuilder();//为了输出要求的格式,利用StringBuilder来储存
while (iterator.hasNext()) {
Map.Entry<Character, Integer> entry = iterator.next();
Character character = entry.getKey();
Integer integer = entry.getValue();
aBuilder.append(character + "(" + integer + ")");
}
return aBuilder.toString();
}
}