- /*
- 需求:获取该字符串中的字母出现的次数,如:"sjokafjoilnvoaxllvkasjdfns";希望打印的结果是:a(3)c(0).....
- 通过结果发现,每个字母都有对应的次数,说明字母和次数之间有映射关系。而且字母是有顺序的。
- 想到:TreeMap集合会给键自动排序,可以把字母存到键上;
- 而且,每一次添加如果相同的键会将值更新,所以定义一个计数器每次取出原有的值然后+1;
- 思路:1、将字符串转换为字符数组
- 2、定义一个TreeMap集合,用于存储字母和字母出现的次数
- 3、用数组去遍历集合,如果集合中有该字母则次数加1,如果集合中没有则存入
- 4、将TreeMap集合中的元素转换为字符串
- */
- import java.util.*;
- class TreeMapTest
- {
- public static void main(String[] args)
- {
- String s ="dfeogjsdgr45djgidji24thfdljb;f[rg'";
- System.out.println("s中各字母出现的次数:"+charCount(s));
- }
- public static String charCount(String s)
- {
- char[] c = s.toCharArray();
- TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
- //int count = 0;
- for(int x = 0;x<c.length;x++)
- {
- int count =0;
- if(!((c[x]>='a'&&c[x]<='z')||(c[x]>='A'&&c[x]<='Z')))
- continue;
- Integer value = tm.get(c[x]);
- if(value!=null)
- count = value;
- count++;
- tm.put(c[x],count);
- }
- StringBuilder sb=new StringBuilder();
- Iterator<Map.Entry<Character,Integer>> it = tm.entrySet().iterator();
- while(it.hasNext())
- {
- Map.Entry<Character,Integer> me= it.next();
- Character ch = me.getKey();
- Integer i = me.getValue();
- sb.append(ch+"("+i+")");
- }
- return sb.toString();
- }
- }
复制代码
|