- package com.itheima;
- import java.io.BufferedReader;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- public class Test{
- public static void main(String[] args) {
- //定义一个Map对象,因为我们要统计每个字符出现的次数那么把每个字符作为每个键存在,次数作为所对应的值
- //在Map集合中,利用集合出现相同键时会用新值覆盖掉原来的老值,进行累加存储这样最终存储下来的值就是该键所对应的次数
- Map<Character,Integer> map = new HashMap<Character,Integer>();
- //要读取的是纯文本数据并且数据有很多行,那么就可以使用缓冲区进行读取和写入,缓冲区带有读取一行的方法
- BufferedReader bufr = null;
- try{
- bufr = new BufferedReader(new FileReader("C:\\Users\\鹏杰\\Desktop\\a.txt"));
- String line = null;
- while((line=bufr.readLine())!=null){
- //把读取到的字符串转为字符数组,因为我们要对每一个字符进行操作
- char[] cha = line.toCharArray();
- for(int i=0; i<cha.length; i++) {
- //for循环取出每一个元素,如果该元素在Map集合中不存在那么把该元素作为键,所对应的值设定为1,因为该元素是第一次出现
- if(!(map.containsKey(cha[i]))){
- map.put(cha[i],1);
- //否则,要是该元素已经存在,那么获取已存在键所对应的值并进行+1处理,再把该元素对应新值存入集合当中,这样就想当于刷新记录该元素出现的次数
- }else{
- map.put(cha[i],map.get(cha[i])+1);
- }
- }
- }
- }catch(IOException e){
- throw new RuntimeException("文件读取失败");
- }finally{
- try{
- if(bufr!=null)
- bufr.close();//关闭流资源
- }catch (IOException e){
- throw new RuntimeException("数据读取失败");
- }
- }
- //对集合进行遍历输出
- Set<Character> ketSet = map.keySet();
- Iterator<Character> ite = ketSet.iterator();
- while(ite.hasNext()){
- //ite.next()获取存储到Set集合中的每一个元素,也就是获取Map的每一个键
- //map.get(ite.next())利用Map的get(Key);方法通过所取到的键来取出键所对应的值
- System.out.println("字符("+ite.next()+")出现了:"+map.get(ite.next())+"次");
- }
- }
- }
复制代码 |