"fdgavcbsacdfs" 获取该字符串中,每一个字母出现的次数。 要求打印结果是:a(2)b(1)...; 思路:
对于结果的分析发现,字母和次数之间存在着映射关系。而且这种关系很多。 很多就需要存储,能存储映射关系的容器有数组和Map集合。
关系一方式中是有序编号吗?有就使用数组,没有!那就是使用Map集合。 又发现可以保证唯一性的一方具备着顺序如a b c.....
所以可以使用TreeMap集合。
这个集合中应该存储的是字母和次数的对应关系。
1,因为操作的是字符串中的字母,所以先将字符串变成一个字符数组。 2,遍历字符数组,用每一个字母作为键去查Map集合这个表。
如果该字母键不存在,就将该字母作为键1作为值存储到Map集合中,代表出现一次。
如果该字母键存在,就将该字母键对应值取出并自增,再将该字母和自增后的值存储到Map集合中, 键相同值会覆盖,这样就记录住了该字母的次数。
3,遍历结束,Map集合就记录所有字母的出现的次数。
1 package exmap; 2 3 import java.util.Iterator; 4 import java.util.Map; 5 import java.util.Set; 6 import java.util.TreeMap; 7 8 public class ExMap { 9 10 public static void main(String[] args) { 11 // TODO Auto-generated method stub 12 13 Map<Character, Integer> map = null; 14 map = new TreeMap<Character, Integer>(); 15 map.put('a', 0); 16 map.put('b', 0); 17 map.put('c', 0); 18 map.put('d', 0); 19 map.put('f', 0); 20 map.put('g', 0); 21 map.put('s', 0); 22 map.put('v', 0); // 把字符串中有的字母放在TreeMap集合表里面 23 24 String a = "fdgavcbsacdfs"; 25 char[] array = a.toCharArray(); // 把字符串转成字符数组 26 int num = 0; 27 Set<Character> keys = map.keySet(); 28 Iterator<Character> iter = keys.iterator(); 29 while (iter.hasNext()) { 30 Character str = iter.next(); 31 for (int i = 0; i < a.length(); i++) { 32 if (array[i] == str) { 33 num = map.get(str) + 1; 34 map.put(str, num); 35 } 36 } 37 38 } 39 Set<Character> keys1 = map.keySet(); 40 Iterator<Character> iter1 = keys.iterator(); 41 while (iter1.hasNext()) { 42 Character str1 = iter1.next(); 43 System.out.print(str1 + "(" + map.get(str1) + ")"); 44 } 45 46 } 47 }