读取一个文件,获取其中出现次数最多的前五个字符以及次数
Posted yuanfei1110111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读取一个文件,获取其中出现次数最多的前五个字符以及次数相关的知识,希望对你有一定的参考价值。
直接上代码:
public class Test {
public static void main(String[] args) {
demo(new File("E:\aa.txt"));
}
public static void demo(File file) {
BufferedReader bfr = null;
try {
bfr = new BufferedReader(new FileReader(file));// 读文件
String strs = null, str = null;
while ((str = bfr.readLine()) != null) {
strs = strs + str;
}
char[] ch = strs.toCharArray();// 读到的字符串,转为字符数组
TreeMap<Character, Integer> map = new TreeMap<Character, Integer>(Collections.reverseOrder()); // 将字符数组放入Map对象集合中,字符作为键,出现的次数作为值
for (int i = 0; i < ch.length; i++) {
char c = ch[i];
if (map.containsKey(c)) {
int count = map.get(c);
map.put(c, count + 1);
} else {
map.put(c, 1);
}
}
List<Entry<Character, Integer>> list = new ArrayList<Entry<Character, Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
// 升序排序
public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
Collections.reverse(list);// 反转,List由升序变为降序
for (Entry<Character, Integer> e : list) {
System.out.println(e.getKey() + ":" + e.getValue());
}
System.out.println("前五条数据");
list = list.subList(0, 5);// 截取子List,读取前五个字符以及出现的次数
for (Entry<Character, Integer> e : list) {
System.out.println(e.getKey() + ":" + e.getValue());
}
} catch (FileNotFoundException e) {
System.out.println("找不到文件!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("文件读取错误!");
e.printStackTrace();
}
}
}
以上是关于读取一个文件,获取其中出现次数最多的前五个字符以及次数的主要内容,如果未能解决你的问题,请参考以下文章
Linux命令经典面试题:统计文件中出现次数最多的前10个单词