读取一个文件,获取其中出现次数最多的前五个字符以及次数

近期遇到这个题目的时候,大致思路是有就是读取文件,字符串转字符数组,排除重复的内容比较次数,结果问题就卡到这里,忘记使用map的键值对的特性,以及Collections.sort和Collections.reverse两个方法。为了方便以后的使用,就把解决方法完成到这里,但是这里读取文件时空格也是在统计内,且中文没有做处理。

具体的代码如下:

public class Qu {
public static void main(String[] args) {
demo(new File("F:\\qu\\a.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);
}

}
/*//遍历Map集合
Set<Map.Entry<Character, Integer>> set = map.entrySet();
java.util.Iterator<Entry<Character, Integer>> iterator = set
.iterator();
while (iterator.hasNext()) {
Map.Entry<Character, Integer> m = iterator.next();
char k = m.getKey();
int v = m.getValue();
System.out.println(k + "---" + v);
}*/
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();
}
}

}

欢迎诸位指导。

时间: 2024-11-10 04:28:49

读取一个文件,获取其中出现次数最多的前五个字符以及次数的相关文章

读取一个文件,给定一个字符串,判断这个字符串在文件中出现的次数

读取一个文件,给定一个字符串,判断这个字符串在文件中出现的次数,面试笔试经常遇到的问题 public class CountStringTest { public static void main(String[] args) { try { //统计E盘下面test.txt中的q字符出现的次数 System.out.println("E盘下面test.txt中的q字符出现的次数为:"); System.err.println(count("E:\\test.txt"

PHP文件操作 之读取一个文件(以二进制只读的方式打开)

最近应用了文件的读取,顺便复习一下! //读取一个文件 $f = fopen($filename,'rb'); $f: 表示返回的一个资源句柄 $filename:要打开的文件路径 rb:参数,表示只读且以二进制的形式打开该文件 读取后循环该文件数据,因为读取文件是一行一行的 //如果没有读取到文件结束则循环 while(!feof($f)) { $str = fgets($f);//获取的是每一行的数据 /*对该数据进行的操作代码...*/ } //关闭该资源 fclose($f);

用java实现输出英文小说飘中出现次数最多的前N个单词(附:使用文件读写)

本文参考于:https://blog.csdn.net/u014204432/article/details/40348839 一.题目 输出单个文件(<飘> 英文版)中的前 N 个最常出现的英语单词,并将结果输入到文本文件中. 二.程序设计思路 1.首先将英文小说飘文件内容用文件读写方式读入StringBuffer中,然后一行一行读取并去掉句子和单词 间空格然后将StringBuffer转换成String,然后再将所有字符转化成小写字符,然后再将句子分割成单词并 存入字符数组. 2.随后遍历

python读取一个文件的每一行判断是否为素数,并把结果写到另一个文件中

刚刚学习python的菜鸟,这道题包括:文件的读写,python的参数调用,异常的使用,函数的使用 创建一个文本文件inti_prime.txt 执行命令:python Prime.py init_prime.txt result_prime.txt 会生成一个result_prime.txt文件 1 #-*- coding:UTF-8 -*- 2 #读取一个文件的每一行,每一行为一个数字 3 #判断数字是不是素数 4 #并打印结果到另外一个文件 5 #输入文件名和输出文件名用参数的形式 6 i

【文件】读取一个文件夹下所有的jpg图片

今天做视频处理的时候,发现给的视频是用jpg图片的形式给出的,名字的命名规律性不是很强.就想找一种通用的遍历文件夹下图片的方法. 开始在网上找到了下面这份代码,发现只能读取所有的文件夹,文件都被跳过了 后来发现,原来是判断的if语句出了问题.dwFileAttributes有很多种属性如: FILE_ATTRIBUTE_ARCHIVE FILE_ATTRIBUTE_COMPRESSED FILE_ATTRIBUTE_DIRECTORY FILE_ATTRIBUTE_HIDDEN FILE_ATT

黑马程序员——IO——读取一个文件中的文字输出到控制台上

读取一个文件中的文字输出到控制台上 import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; //读取一个文件中的文字 ,输出到控制台上 //读取的是字符文字,因此可以使用字符流来操作 public class FileReaderDemos { public static void main(String[] args) { // TODO Auto-generate

不用for loop循环一个读取一个文件

怎样在不使用for loop的情况下循环读取一个文件并将内容显示出来呢? #!/usr/bin/env python #coding:utf-8 #@Author:Andy # Date: 2017/6/13 """ if you want to process an iterable object ,but you don't want to use loop """ # method 1 with open('test.txt') as f:

python3中 for line1 in f1.readlines():,for line1 in f1:,循环读取一个文件夹

1 #-*- encoding:utf-8 -*- 2 3 class loadDatas(object): 4 def __init__(self): 5 self.path='./data' 6 def load_compare(self): 7 l1={} 8 f1=open(self.path+'/95b.txt',encoding='utf-8') 9 l2={} 10 f2=open(self.path+'/05b.txt',encoding='utf-8') 11 f=open(s

读取一个文件每行中的各列数据

读取一个文件每行中的各列数据 1.被读取的文件内容 [[email protected] leekwen]# cat userpwd 1412230101 ty001 1412230102 ty002 1512430102 ty003 1511230102 ty004 1411230102 ty002 1411240102 yt005 1412290102 yt012 1510230102 yt022 1512231212 yt032 2.脚本命令 [[email protected] leek