获取字符串中每一个字母出现的次数

来源:互联网 发布:linux zip 解压乱码 编辑:程序博客网 时间:2024/05/17 05:08
package cn.api.d.test;import java.util.Map;import java.util.TreeMap;public class MapTest {/** * @param args */public static void main(String[] args) {/* * 练习: * "werertrtyuifgkiryuiop",获取字符串中每一个字母出现的次数。 * 要求返回结果个格式是  a(1)b(2)d(4)......; * 思路: * 1,获取到字符串中的每一个字母。 * 2,用字母取查表,如果查到了该字母对应的次数,就将这个次数+1后重新存回表中。 * 如果没有查到呢?将该字母和1存到表中。 * 3,每一字母都查完表后,表中记录的就是所有字母出现的次数。 *  * 字母和次数之间存在对应关系,而且字母是唯一性的,所以可以使用map集合做表进行查询。 * 通过结果发现 字母有顺序的,所以可以通过map集合中的treemap作为表。 *  */String str = "awaa+acr=ebarct,btydui[efgkiryuiop";str = getCharCount(str);System.out.println(str);}/** * 获取字符串中的字母出现次数。 *  * @param str * @return 返回一个每一个字母对应次数的字符串 格式  char1(count)char2(count).....; */public static String getCharCount(String str) {//1,将字符串转成字符数组。char[] chs = str.toCharArray();//2,定义表。treemap.TreeMap<Character, Integer> map = new TreeMap<Character, Integer>();//3,遍历字符数组。for (int i = 0; i < chs.length; i++) {//判断必须是字母。if(!(chs[i]>='a' && chs[i]<='z' || chs[i]>='A' && chs[i]<='Z')){continue;}//4,将遍历到的字母作为键去查map这个表。获取对应的次数。Integer value = map.get(chs[i]);//5,有可能要查询的字母在表中不存在对应的次数,需要判断。//如果返回是null,说明字母没有对应的次数。就将这个字母和1存储到表中。if(value == null){//将字母和1存储。map.put(chs[i],1);}else{//否则,说明有对应的次数对次数自增。将字母和新的次数存储到表中。value++;map.put(chs[i],value);}/* //两个if判断,选择哪个都行。int count = 0;if(value!=null){count = value;//用count记录次数。}count++;//自增。map.put(chs[i], count);*/}//将map集合中的键值转成   格式是  a(1)b(2)d(4)......return mapToString(map);}/* * 将map集合中的键值转成   格式是  a(1)b(2)d(4)...... * map中有很多数据,无论是多少个,什么类型,最终都变成字符串。 * StringBuffer 这个容器就符合这个需求。如果是单线程,建议使用StringBuilder。 *  */private static String mapToString(Map<Character, Integer> map) {//1,明确容器。StringBuilder sb = new StringBuilder();//2,遍历map集合。for(Character key  : map.keySet()){Integer value = map.get(key);sb.append(key+"("+value+")");}return sb.toString();}}

阅读全文
0 0
原创粉丝点击