大家好,我是进入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;
}
}
希望在看我这篇文章的时候能够给你一个参考,如果能更加优化或者更好的代码请联系我或者回复给我,谢谢!