文件与流
实验一:
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对象,储存排过序后的键和值。