您的位置:首页 > 其它

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

2016-06-12 12:48 162 查看
一些经验总结:

1.对于读取文件,大家要熟记BufferedReader类,他可以一次读取一行,在很多的笔试题会遇到这样的例子,但是判断读取结束的标志并不是我们平时所见的-1,而是null。

2.可以利用集合进行简化代码,比如list元素可以重复,但是set的元素不可以重复等

package com.hbut.test;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

public class ReadName {

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

*/
public static void main(String[] args) throws IOException {

//使用BufferedReader一次可以读取一行,判断是否为结尾用null判断
BufferedReader bf = new BufferedReader(new FileReader("names.txt"));

 
String str= bf.readLine();
List<String> names = new ArrayList<String>();
while(str!=null){  //1,张三,28
String []st=str.split(",");
names.add(st[1]);
//只把姓名添加进去就可以了
str= bf.readLine();
}

   Set<String> name =
new HashSet<String>(names); //[赵六, 张三, 田七, 李四, 王五]  
   //由于set集合是不允许有重复的元素的,所以可以用set集合去重
for(String set :name){
String temp=set;
int num=0;
for(String s : names)  //list集合里有很多重复的。对每次迭代的元素,要是次数大于2就表示重复
{
if(temp.equals(s)){
num++;
}

}
if(num>=2){
System.out.println(temp+"重复次数:"+num);

}

}
   

}


}

输出结果:

                  张三重复次数:3

                  李四重复次数:2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  经验 class