计算出出现次数最多的字母和该字母出现的次数

方法一:

package testString;

import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.junit.Test;

public class MyTest
{
    /**
     * 给你一个字符串,包含了空格等标点符号,要你计算出出现次数最多的字母和该字母出现的次数。
     */
    @Test
    public void test()
    {
        String s = "123432341212,&asdaghjsa  1234352wko我第三方";
       
        Set<MyChar> set = new HashSet<MyChar>();
        for (int i = 0; i < s.length(); i++)
        {
            MyChar myChar = new MyChar(s.charAt(i), 1);
            boolean b = set.add(myChar);
            if (!b)
            {
                add(set, myChar);
            }
        }
        List<MyChar> list = new LinkedList<MyChar>();
        list.addAll(set);
        set = null;
       
        /** 取最大值 */
        MyChar big = Collections.max(list);
       
        System.out.println("出现次数最多的字母: " + big.getName() + " 该字母出现的次数" + big.getCount());
    }
   
    /** 当已经存在时,把数字加1 */
    public void add(Set<MyChar> set, MyChar myChar)
    {
        for (MyChar my : set)
        {
            if (my.equals(myChar))
            {
                my.setCount(my.getCount() + 1);
            }
            break;
        }
    }
   
    /** 实现相等的判断和可比较的判断 */
    public class MyChar implements Comparable<MyChar>
    {
        private Character name;
       
        private int count;
       
        public MyChar(Character name, int count)
        {
            super();
            this.name = name;
            this.count = count;
        }
       
        public Character getName()
        {
            return name;
        }
       
        public void setName(Character name)
        {
            this.name = name;
        }
       
        public int getCount()
        {
            return count;
        }
       
        public void setCount(int count)
        {
            this.count = count;
        }
       
        @Override
        public int compareTo(MyChar o)
        {
            return this.count == o.count ? 0 : this.count > o.count ? 1 : -1;
        }
       
        @Override
        public boolean equals(Object obj)
        {
            if (obj instanceof MyChar && this.name != null && this.name.equals(((MyChar)obj).name))
            {
                return true;
            }
            return false;
        }
       
        @Override
        public String toString()
        {
            // TODO Auto-generated method stub
            return "字母名字 : " + this.name + " 出现次数: " + this.count;
        }
       
        @Override
        public int hashCode()
        {
            // TODO Auto-generated method stub
            return name.hashCode();
        }
       
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值