获取字符串中字母出现的个数
2015-11-22 16:48
417 查看
import java.util.*; /* 练习: "sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。 希望打印结果:a(1)c(2)...... 通过结果发现:每一个字母都有对应的次数。 说明字母和次数之间都有映射关系。 注意:当发现有映射关系时,可以选择map集合, 因为Map集合中存放的就是映射关系。 思路: 1、将字符串转换为字符数组,因为要对每一个字母进行操作。 2、定义一个map集合,因为打印结果的字母有顺序,所以使用treeMap集合。 3、遍历字符数组。 将每一个字母作为键去查map集合。 如果返回null,将字母和1存入到map集合中。 如果返回的不是null,说明该字母在map集合已经已经存在并有对应次数。 那么久获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合,覆盖掉原来键锁对应的值。 4、将map集合中的数据变成指定的字符串形式返回。 */ public class TreeMapExercise { public static void main(String[] args) { String s=charCount("sdfgzxcvasdf111222xcvdf"); System.out.println(s); } public static String charCount(String str){ char[] chs=str.toCharArray(); TreeMap<Character,Integer> tm=new TreeMap<>(); int count=0; for(int x=0;x<chs.length;x++) { //如果不是字母就忽略不计 if(!(chs[x]>='a'&&chs[x]<='z' || chs[x]>='A'&&chs[x]<='Z')) continue; Integer value=tm.get(chs[x]); if(value!=null) count=value; count++; tm.put(chs[x], count); count=0; //两种方式都可以 /*if(value==null) { tm.put(chs[x],1); } else { value=value+1; tm.put(chs[x], value); }*/ } System.out.println(tm); StringBuilder sb=new StringBuilder(); 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 ch=me.getKey(); Integer value=me.getValue(); sb.append(ch+"("+value+")"); } return sb.toString(); } }
没加判断是不是字符的语句时的结果:
加上判断语句后的结果:
相关文章推荐
- svn的merge使用例子
- 延迟对象$q和供应商配置config
- DatePickerDialog 只显示年 (解决不同语言顺序不一样的问题)
- Leet Code 100 Same Tree
- EMC的一道数字编程编程题
- 什么是http头信息
- Xcode cannot run using the selected device-无法真机调试
- js数组存储对象及对象的获取
- easyui环境搭建02
- HDU 2070 叠框
- 多媒体封装格式学习:H264封装成FLV(二)
- tcpdump 参数详解
- 更改Apache默认网站根目录
- Unique Paths II-leetcode
- Android 实现滑动的几种方法(一)onLayout方法 和 offsetLeftAndRight()与offsetTopAndBottom();
- 小技巧之nvidia-smi
- res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
- JSP中getParameter与getAttribute有何区别?
- cocoapods 0.35.0 版本 报错 Parsing unable to continue due to parsing error:
- HDU1032&Uva100 The 3n + 1 problem