2017年初编码标题之一:通过关键字查找在文字中出现的次数并按照降序的排列进行展示

大家好,我是进入java 1年工作经验的小白,在2017年去上海面试中出现一个笔试题而且还是现场的编码题  被难住了,记住问题后回家开始编码去实现,题目是:

     通过一些 关键字 大串的文字中 进行查找 并 统计 出现的 次数 然后按照 降序 进行打印

以下就是我自己编写的代码:

package sadf;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;




public class Test2 {
    public static void main(String[] args) {
        String[] str2 = {"今天", "回家", "天气", "开心"};
        String str = "今天天气很好,如果有人看到我的博客我会非常开心真的会很开心,今天我也真是很开心的分享我的经验,请大神门不要骂我,我回家了,祝大家天天开心!";
        Test2.counts(str, str2);
    }


    /**
     * 遍历并排序
     */
    public static void counts(String str, String[] str2) {
        Map<String,Integer> map = search(str, str2);
        List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {


            @Override
            public int compare(Entry<String, Integer > o1, Entry<String, Integer > o2) {
                // o1 - o2 为升序 相反降序
                return (o2.getValue() - o1.getValue());     
            }


        });


        for (Entry<String, Integer> entry : list) {
            // 打印
            System.out.println(entry.toString());
        }
    }


    /**
     * 用来统计保存关键字及出现的次数
     */
    public static Map<String, Integer> search(String str, String[] str2) {
        Map<String, Integer> map = new TreeMap<String, Integer>();
        for (int i = 0; i < str2.length; i++) {
            int count = 0;// 统计出现的次数
            int num = 0;// 出现的位置,并查找存在对应的字符
            int temp = 0;// 查询多个匹配的文字
            while ((str.length() - temp) >= 1) {
                num = str.indexOf(str2[i], temp);
                if (num == -1) {
                    temp = str.length();
                } else {
                    temp = num + 1;
                    count++;
                    map.put(str2[i], count);
                }
            }
        }
        return map;
    }


}


希望在看我这篇文章的时候能够给你一个参考,如果能更加优化或者更好的代码请联系我或者回复给我,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值