编程题--给定一个字符串数组,判断每个字符出现次数

来源:互联网 发布:apache文件服务器搭建 编辑:程序博客网 时间:2024/04/30 15:10

题目要求:给定一个字符串数组,判断每个字符出现多少次?
解决思路:利用Map的特性:即Map集合中如果两个key(键)值是一样相同的,那么,后放(put)入的值会将前面存在的value(值)替换掉,也就是覆盖了前面的value。
所以把字符数组中的字符当作key,每遇到相同的key,value值加1即可。代码如下:

public class HsahMapTest{    /**     * 给定一个字符串数组,判断其中每个字符出现了多少次,并打印输出     * @param args     */    public static void main(String[] args)    {        HashMap<String,Integer> map = new HashMap<String,Integer>();        String[] str = {"a", "hello", "a", "hello", "b", "c","b"};        for(int i = 0; i < str.length; i ++)        {            if(map.get(str[i]) == null)            {                map.put(str[i], 1);            }            else            {                map.put(str[i], map.get(str[i])+1);            }        }        //遍历map        Set<String> keys = map.keySet();        for(Iterator<String> iter = keys.iterator(); iter.hasNext(); )        {            String key =  iter.next();            System.out.println(key + "=" + map.get(key));        }    }}

运行结果:
a=2
b=2
c=1
hello=2


另一种我一开始写错了,但经过思考想通了为什么得不到正确的结果,代码如下:

public class HsahMapTest{    /**     * 给定一个字符串数组,判断其中每个字符出现了多少次,并打印输出     * @param args     */    public static void main(String[] args)    {        HashMap<String,Integer> map = new HashMap<String,Integer>();        String[] str = {"a", "hello", "a", "hello", "b", "c","b"};        for(int i = 0; i < str.length; i ++)        {            if(map.get(str[i]) == null)            {                map.put(str[i], 1);            }            //出错的地方在这个if            if(map.get(str[i]) != null)            {                map.put(str[i], map.get(str[i])+1);            }        }        //遍历map        Set<String> keys = map.keySet();        for(Iterator<String> iter = keys.iterator(); iter.hasNext(); )        {            String key =  iter.next();            System.out.println(key + "=" + map.get(key));        }    }}

运行结果:
a=3
b=3
c=2
hello=3

错误原因分析:第一次value为null,执行第一个if时,put进值;接着再执行下一个if语句,判断,满足第二个if条件,于是加1。之后正常。所以总是比正确结果要多一次。

0 0
原创粉丝点击