从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序:
1,张三,28
2,李四,35
3,张三,28
4,王五,35
5,张三,28
6,李四,35
7,赵六,28
8,田七,35

一、思路:

  1、对于读取文件,要熟悉掌握bufferReader类。它可以一次读一行,读取结束的标志是null。

  2、可以用集合处理代码重复,比如list(可重复)和 map(键值对)等。

  即:取出每一行的内容,放入list集合中,读出每个内容中的name跟map中的key进行比较,如果name等于map的key,则map的value+1,否则value=1 。把name和value分别存入map中。

二、代码

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/**
 1、读取文件,创建BufferedReader对象,BufferedReader类可以一次读取一行
 2、创建 ArrayList 对象,重复有序,可用于存放全部的数据
 3、创建一个map集合,进行键的比较,将名字存为键,判断key是否相同,key相同则value自加1.
 */
public class question5{
    public static void main(String[] args) throws IOException {  
    
        File f = new File("D:" + File.separator + "a.txt");  
        BufferedReader bf = new BufferedReader(new FileReader(f));
    
        ArrayList<String> list = new ArrayList<String>();//放所有值
        Map<String, Integer> map = new HashMap<String, Integer>(); //存放重复信息 
        String temp = null; 
        
        // 读取文件,把取出的每一行放入到list中,readLine()一次读取一行
        while ((temp = bf.readLine()) != null) {  
            list.add(temp);  
        }  

        //遍历计算重复数据和不重复数据 
        for (int i = 0; i < list.size(); i++) {  
            String str = list.get(i).split(",")[1]; //[1]:获取在中找到的数组的第二项,即获取名字 
            boolean flag = false;  
            // 如果出现过,value值加1  
            // entrySet()返回一个Map.Entry实例化后的对象集,表示一个Set集合
            for (Map.Entry<String, Integer> entry : map.entrySet()) {  
                if (entry.getKey().equals(str)) {  
                    entry.setValue(entry.getValue() + 1);  
                    flag = true;  
                    break;  
                }  
            }  
            // 如果没有出现过,加入map  
            if (!flag) {  
                map.put(str, 1);  
            }  
        }  

        // 遍历用于输出重复名字和次数
        for (Map.Entry<String, Integer> entry : map.entrySet()) {  
            if (entry.getValue() > 1) {  
                System.out.println("\"" + entry.getKey() + "\"" + "重复次数:" + entry.getValue());  
            }  
        }  
    }  
}

 

posted on 2020-05-11 21:48  小潘同学  阅读(350)  评论(0)    收藏  举报
-->