从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序

文件格式如下: 

1,s,28
2,a,35
3,a,28
4,b,35
5,s,28
6,a,35
7,c,28
8,d,35
9,c,28
10,c,28
11,c,28
12,c,28
13,c,28

代码的思路如下: 

首先取出每行的内容,并放入一个list中,然后取出每一行的name分别放入set和list中,计算出重复的个数,最后进行排序。

package jisuan;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class StringTest {

    public static void main(String[] args) throws Exception {
        InputStreamReader is = new FileReader("C:\\test\\b.txt");
        BufferedReader br = new BufferedReader(is);
        List<String> list = new ArrayList<String>();
        String str = "";
        // 读取文件,把取出的每一行放入到list中
        while ((str = br.readLine()) != null) {
            list.add(str);
        }
        // 使用set存放name 不包括重复,使用list 存放所有的name
        Set<String> set = new HashSet<String>();
        List<String> listname = new ArrayList<String>();
        for (String s : list) {
            String[] sa = s.split(",");
            set.add(sa[1]);
            listname.add(sa[1]);
        }
        // 获取重复name的数目
        List<P> Plist = new ArrayList<P>();

        for (String setstr : set) {
            int count = 0;
            for (int j = 0; j < listname.size(); j++) {

                if (setstr.equals(listname.get(j))) {
                    count++;
                }
            }
            if (count > 1) {
                Plist.add(new P(count, setstr));
                // 这个是对于Comparable 接口的
                Collections.sort(Plist);
            }
        }
        for (P p : Plist) {
            System.out.println(p.count + "===" + p.name);
        }

    }
}

// 创建一个类,并排序
class P implements Comparable<P> {
    int count;

    String name;

    public P(int count, String name) {
        this.count = count;
        this.name = name;
    }

    @Override
    public int compareTo(P o) {
        if (this.count > o.count) {
            return 1;
        } else {
            return -1;
        }
    }

}
输出的结果是:
2===s
3===a
6===c
时间: 2024-08-30 01:38:33

从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序的相关文章

Java基础知识强化之IO流笔记45:IO流练习之 把文本文件中数据存储到集合中的案例

1.  把文本文件中数据存储到集合中      需求:从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合. 分析:      通过题目的意思我们可以知道如下的一些内容,      数据源是一个文本文件.      目的地是一个集合.      而且元素是字符串.      数据源:   b.txt -- FileReader -- BufferedReader  目的地:  ArrayList<String> 2. 代码示例: 1 package cn.itcast_02; 2

查询出Exchange Server的通讯组,并将通讯组成员输出到本地的文本文件中!

最近客户有一个需求,希望查询所有通讯组的成员,这个使用PS 来做的话会比较简单,怎么做?代码如下: 此POWERSHELL 在exchange 2010 执行通过! param($temppath="c:\log" #定义日志输出路径) if(!(Test-Path $temppath)) #判断日志路径是否存在,如果不存在则建立目录{New-Item -Path $temppath #建立日志路径} $groupNum=get-distributiongroup #将所有通讯组输出到

读取文本文件中指定的几列

今天在论坛上看到一个问题,这个问题大概是这样的,读取文本文件中指定的几列,并存储入数据库中. Insus.NET花上些少时间,实现读取文本的功能部分.创建一个文本文件,文本添加好几行.每一行有好几列,列与列之间使用逗号分隔. adf,adfadf,adsfgads,qwer,wrt,wrey,asdfs,qwer,tryerqert6uy7,468u4,578,qewrqew,qwertwet,67u46,45676,45qer87,47857,et356y,etyedgh adsadf,adf

java基础-输入流-读取文本文件中数据至字符串数组

简介:如题 import java.io.FileInputStream; /** * @author czchina * */ public class TestStream { public static void main(String[] args) { // TODO Auto-generated method stub //声明输入流的引用 FileInputStream fls = null; //声明输出流的引用 FileOutputStream fos =null; try{

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

android 从assets和res中读取文件(转)

1. 相关文件夹介绍 在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件.在后面会介绍如何读取assets文件夹的资源! res文件夹里面的多个文件夹的各自介绍(来自网上的Android开发指南中文版内容): 目录Directory 资源类型Resource Types res/anim/ XML文件,它们被编译进逐帧动画

C中读取键盘码

键盘码在底层开发中经常用到,有时候我们会忘记它们,就要急急忙忙的去找 键-码 对照表查看,其实程序可以自己打印出 键-码 对应值 #include <stdio.h> #include <bios.h> int main(void) { int key, modifiers; while ((key=bioskey(0)) != 0 && key!=0x11b){ printf("0x%x ",key); } return 0; } 扫描码   

在ASP.NET 5中读取配置文件

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 在ASP.NET 5中摒弃了之前配置文件的基础结构,引入了一个全新配置文件系统.今天推荐的文章就简单介绍了这方面的内容. 微软在即将正式发布的跨平台运行时当中引入了一个全新的配置文件基础结构,基于这个配置系统,从多个配置文件中读取内容从来没有这么容易过. 这个配置系统不仅内置支持json,xml和ini格式的配置文件,还支持从环境变量中读取内容.如下: var configuration = new

小工具: 执行文本文件中的代码

代码很简单 但是比较实用 尤其是调试期间 (本意只想执行一些SQL的,后来发现使用的场景还是比较多的 于是就分享一下)   比如程序上传到测试机后 突然想用SQL修改一些自定义表中的东西 但是测试机有没有开发权限 又要从开发机改了传一个过来? 把代码写在文本文件中 执行本程序就OK   ABAP代码就像一个脚本一样了 测试期间多准备几个"脚本"  谁用谁知道! 效果如下: 外部文本 执行效果:     代码: CLASS lcl_sql DEFINITION. PUBLIC SECTI