Map集合重要练习

重要练习:将字符串中的字母按如下格式显示:

a(1)b(2)......

代码及思路如下:

/*
获取字符串中字母的次数,并打印出如下格式a(1)b(2)c(3)......


思路:
先定义一个方法,将该功能进行封装.
1.首先将字符串转换成字符数组 方法是toCharArray();
2.定义一个map容器用来接收每个字符, 因为结果是有序的可以使用TreeMap
3.遍历字符数组 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);
    
    }
}    
    
原文地址:https://www.cnblogs.com/jerryho/p/4759013.html