黑马程序员技术交流社区

标题: MapTets [打印本页]

作者: 朱烈葵    时间: 2012-7-19 20:45
标题: MapTets

//希望打印结果:a(1)c(2).....
import java.util.*;
class MapTest5
{
public static void main(String[] args)
{
  String str = "aaddcc!#@$1bb";
  String s = geCount(str);
  System.out.println(s);

}
public static String geCount(String str)
{
  char []   ch = str.toCharArray();
  TreeMap<Character,Integer> map = new TreeMap<Character,Integer>();
  

  int count=0;
  for (int x=0;x<ch.length;x++)
  {
   if (!(ch[x]>='a' && ch[x]<='z' || ch[x]>='A' && ch[x]<='Z'))
   {
    continue;
   }
   Integer value = map.get(ch[x]);
   if (value==null)
   {
    map.put(ch[x],1);
   }
   else
   {
     count = value+1;
   
     map.put(ch[x],count);
   }
   
   
   count = 0;
   
  }
  Set<Character> set = map.keySet();
  
  Iterator<Character> it = set.iterator();
  StringBuilder sb = new StringBuilder();
  while (it.hasNext())
  {
   Character key =  it.next();
   Integer  in = map.get(key);
  
   sb.append(key + "(" + in  + ")");
  }
  
  return sb.toString();
}
}


作者: 罗宵    时间: 2012-7-19 23:08
map中的键是唯一的。以后出现的会覆盖之前的值。你这个程序是计算字符串中每个字母出现的次数的。因为你给的字符串是aaddccbb都是两次,所以最后输出的结果都是字母(2),若要你想要的结果,那就改输入的字符串。比如:"abbcccdddd",那就是a(1)b(2)c(3)d(4)
作者: 朱烈葵    时间: 2012-7-24 16:02
不是,这有问题吗?
作者: 田向向    时间: 2012-7-24 16:20
这是毕老师视频上讲过的例子,建议你多看几遍,好好琢磨琢磨:

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Test2 {

        public static void main(String[] args) {
                //存入字符串
                String s=charCount("abcdekka27qoq");
                System.out.println(s);

        }
        public static String charCount(String str)
       
        {
                //将字符串转换成字符数组,并存储到chs[]中
                char[]chs=str.toCharArray();
                //定义一个TreeMap集合,用来存放字母和出现次数的映射关系
                TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
                //遍历字符数组
                for(int x=0;x<chs.length;x++)
                {
                        //判断字符是否为字母。
                        if(!(chs[x]>='a')&&chs[x]<='z'||chs[x]>='A'&&chs[x]<='Z')
                                continue;
                        //把字母作为键去集合中查找并获取value值,并返回value值。
                        Integer value=tm.get(chs[x]);
                        //如果value==null,说明字母就出现一次
                        if(value==null)
                        {
                                //把结果放进容器中
                                tm.put(chs[x], 1);
                        }
                        else
                        {
                                //次数加1
                                value=value+1;
                                //把字母和自增后的value值放进容器中
                                tm.put(chs[x], value);
                        }
                }
                //建立缓冲区,用于存放需要打印的数据
                StringBuilder sb=new StringBuilder();
                //将TreeMap集合中的tm映射关系取出,放在Set集合中
                Set<Map.Entry<Character,Integer>> entrySet=tm.entrySet();
                //迭代Set集合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();
                        //把键和值放在创建的StringBuilder容器中
                        sb.append(ch+"("+value+")");
                }
                return sb.toString();
        }

}

作者: 朱烈葵    时间: 2012-7-24 19:47
不是  呵呵 我是做个练习,不好意思了 各位  发帖 失误  失误






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2