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,28java
package cglib;ide
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 StringNumber {
//首先取出每行的內容,並放入一個list中,而後取出每一行的name分別放入set和list中,計算出重複的個數,最後進行排序。
@SuppressWarnings("resource")
public static void main(String[] args) throws Exception {
InputStreamReader is = new FileReader("D:\\文件\\QC處理\\2016年11月\\c.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++) {this
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);
}spa
}
}排序
// 建立一個類,並排序
class P implements Comparable<P> {
int count;接口
String name;get
public P(int count, String name) {
this.count = count;
this.name = name;
}it
@Override
public int compareTo(P o) {
if (this.count > o.count) {
return 1;
} else {
return -1;
}
}
}io
輸出:class
2===s
3===a
6===c
一些經驗總結:
1.對於讀取文件,你們要熟記BufferedReader類,他能夠一次讀取一行,在不少的筆試題會遇到這樣的例子,可是判斷讀取結束的標誌並非咱們平時所見的-1,而是null。
2.能夠利用集合進行簡化代碼,好比list元素能夠重複,可是set的元素不能夠重複等
package cglib;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class StringNumber {
/**
* 一、從相似以下的文本文件中讀取出全部的姓名,並打印出重複的姓名和重複的次數,並按重複次數排序
* name.txt文件內容以下
* 1,張三,28
2,李四,35
3,張三,28
4,王五,35
5,張三,28
6,李四,35
7,趙六,28
8,田七,35
*/
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\文件\\QC處理\\2016年11月\\c.txt"), "GBK");
//使用BufferedReader一次能夠讀取一行,判斷是否爲結尾用null判斷
BufferedReader bf = new BufferedReader(isr);
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);
}
}
}
}
輸出:
李四重複次數:2 張三重複次數:3