從相似以下的文本文件中讀取出全部的姓名,並打印出重複的姓名和重複的次數

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

相關文章
相關標籤/搜索