文件与流

实验一:

package test;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.TreeMap;
import java.util.TreeSet;
public class test6
{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("C:\\Users\\admin\\Desktop\\QQ\\Harry Potter and the Sorcerer's Stone.txt"));        
        TreeMap<Character,Integer> hm=new TreeMap<>();
        int  bb;
        while((bb=br.read())!=-1) {    
             if((bb>='A'&&bb<='Z')||(bb>'a'&&bb<='z')) {
                 hm.put((char)bb,hm.containsKey((char)bb)?hm.get((char)bb)+1:1);
            }
            
            }    
        br.close();
        int max=0;
        int sum=0;
        int t=0;
        for(Character k: hm.keySet()) {
            sum=sum+hm.get(k);
          }
        TreeSet<Character> ts=new TreeSet<>(new Comparator<Character>()
        {
            public int compare(Character a,Character b) {
                int num=hm.get(a)-hm.get(b);
                return num==0?1:(-num);
            }
        });
        for(Character k: hm.keySet()) {
            ts.add(k);
        }
        DecimalFormat df = new DecimalFormat("0.00%");
        for (Character c : ts)
        {
            float bai=(float)hm.get(c)/sum;
        
            System.out.println(c+" "+hm.get(c)+" "+df.format(bai));
        }
          
        
        
        //System.out.println(sum);
}}

实验二:
package test;
import java.io.File;
import java.util.*;
import java.util.Comparator;
import java.io.BufferedInputStream; 
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;

public class test2 {
    private static int n=0;
    public static Map sortMap(Map<String, Integer> oldMap) {
        ArrayList<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(oldMap.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {

            @Override
            public int compare(Entry<java.lang.String, Integer> arg0,
                    Entry<java.lang.String, Integer> arg1) {
                return -(arg0.getValue() - arg1.getValue());
            }
        });
        Map newMap = new LinkedHashMap();
        for (int i = 0; i < list.size(); i++) {
            newMap.put(list.get(i).getKey(), list.get(i).getValue());
        }
        return newMap;
    }
        public static void main(String[] agrs)throws Exception {
        BufferedReader br=new BufferedReader(new FileReader("C:\\Users\\admin\\Desktop\\QQ\\1.txt"));
        StringBuffer sb=new StringBuffer();
        String text=null;
        while((text=br.readLine())!=null) {
            sb.append(text);
        }
        br.close();//关闭读入流
        String str=sb.toString().toLowerCase();
        String[] words=str.split("\\W+");
        
        Map<String ,Integer>map=new HashMap<String,Integer>();
        Set<String> wordSet=map.keySet();
        for(int i=0;i<words.length;i++) {
            if(wordSet.contains(words[i])) {
                //如果已经有这个单词了
            Integer number=map.get(words[i]);
            number++;
            map.put(words[i], number);
            }
            else map.put(words[i],1);
        }
        Map newMap=sortMap(map);
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入n的值");
        n=sc.nextInt();
        int l=0;
        for (Object o : newMap.keySet()) {
               
               if(l<n) {
               System.out.println("key=" + o + " value=" + newMap.get(o));
               l++;
               }
            else break;
        
        }     
}        
}

创建缓冲输入流,读取文件中的内容。利用map储存出现的字母(单词)和数量。然后再创建一个map对象,储存排过序后的键和值。

 

posted @ 2019-11-04 21:31  Protect_Winter  阅读(130)  评论(0)    收藏  举报