重要练习:将字符串中的字母按如下格式显示:
a(1)b(2)......
代码及思路如下:
/*获取字符串中字母的次数,并打印出如下格式a(1)b(2)c(3)......思路:先定义一个方法,将该功能进行封装.1.首先将字符串转换成字符数组 方法是toCharArray();2.定义一个map容器用来接收每个字符, 因为结果是有序的可以使用TreeMap3.遍历字符数组 for循环. 将字母作为 键 去map集合中去查询该字母,如果返回null,说明map集合中没有该字母,那么将该字母和1存入到map集合中去, 如果返回的不是null,说明此时的map集合中已经有了该字母,那么在map集合中该字母对应的次数自增1,然后将该字母和自增后的次数存入到map集合中去. 存入后会覆盖原先的次数.3将map集合中的数据按指定形式打印出来 指定形式: 1.定义一个容器.StringBuilder缓冲区可以存放任何数据的形式,通过Map集合的KeySet方法或者entrySet方法获取map集合中的键值或者其映射关系 通过keySet的get(key)方法获取map集合中的value 或者entrySet的方法getKey()方法和getValue()方法获取对应的键和值. 2.最后将键和值通过 StringBuilder的append方法添加进缓冲区,并打印. 由于StringBuilder和String不是同一个类,因此return sb的时候需要 写上toString--->return sb.toString();*/import java.util.*;class MapCharTest{ public static void main(String [] args) { String s = myCharCount("aabbccddedsf"); sop(s); } public static String myCharCount(String str) { //将字符串转换成字符数组 char [] chs = str.toCharArray(); //定义一个map集合 TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(); //遍历字符数组 for(int x = 0; x<chs.length; x++) { //将字母作为 键 去查找对应的 值 Integer value = tm.get(chs[x]); //去除不是字母的其他字符. if(!(chs[x]>='a'&&chs[x]<='z' || chs[x]>='A'&& chs[x]<='Z')) continue; //判断 值 是否存在 if(value==null) tm.put(chs[x],1); else { value = value+1; tm.put(chs[x],value); } } // sop(tm); //创建一个缓冲区 StringBuilder sb = new StringBuilder(); /* //第一种Map取出方式 keySet方法 Set<Character> keySet = tm.keySet(); 迭代set集合中的键集 Iterator<Character> it = keySet.iterator(); while(it.hasNext()) { Character key = it.next(); //获取键 Integer value = tm.get(key); //通过键获取对应的 值 sb.append(key+"("+value+")"); //将键和值添加进缓冲区中 } */ //Map集合第二种取出方式:entrySet Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet(); Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator(); while(it.hasNext()) { Map.Entry<Character,Integer> me = it.next(); Character key = me.getKey(); Integer value = me.getValue(); sb.append(key+"("+value+")"); } return sb.toString(); //将StringBuilder按String形式打印出来. } public static void sop(Object obj) { System.out.PRintln(obj); }}
新闻热点
疑难解答