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

来源:互联网 发布:c语言宿舍管理系统 编辑:程序博客网 时间:2024/05/17 08:02
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();}}


没加判断是不是字符的语句时的结果:

加上判断语句后的结果:


5 0
原创粉丝点击