Java筆記試験問題は、2つの英語のドキュメントを読み取り、その中の2つの単語が最も多く出現した3つを出力します.

3133 ワード

2つのドキュメントをBufferedReaderでそれぞれ読み込むことを考慮し、20 Mのキャッシュスペースでテキストをキャッシュします.1番目のドキュメントのすべての単語と個数を1つのtreeMapに入れ、2番目のドキュメントを読み込むときに、1番目のドキュメントのtreeMapに基づいてフィルタリングし、加算してすべての単語統計map集合を得る.最後にmapをarrayListに入れて並べ替え,top 3の単語を出力する.
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CountsWord {
	
	public static void main(String[] args) throws Exception {
		
		File file1 = new File("E:\\text1.txt");
		File file2 = new File("E:\\text2.txt");
		BufferedInputStream inputStream1 = new BufferedInputStream (new FileInputStream(file1));
		BufferedInputStream inputStream2 = new BufferedInputStream (new FileInputStream(file2));
		//  20M         
		BufferedReader readfile1 = new BufferedReader(new InputStreamReader(inputStream1, "utf-8"), 20 * 1024 * 1024);
		BufferedReader readfile2 = new BufferedReader(new InputStreamReader(inputStream2, "utf-8"), 20 * 1024 * 1024);
		
		String text1 = null;
		String text2 = null;
		Pattern patten = Pattern.compile("[a-zA-Z]+");
		Map map1 = new TreeMap();
		Map map2 = new TreeMap();
		
		//          ,          ,    treemap      
		while ((text1 = readfile1.readLine()) != null) {
			Matcher matcher = patten.matcher(text1);
			while (matcher.find()) {
				String word = matcher.group();
				if (map1.containsKey(word)) {
					Integer wordfrequency = map1.get(word);
					map1.put(word, wordfrequency + 1);
				} else {
					map1.put(word, 1);
				}
			}
		}
		while ((text2 = readfile2.readLine()) != null) {
			Matcher matcher = patten.matcher(text2);
			while (matcher.find()) {
				String word = matcher.group();
				//map1    word     
				if(map1.containsKey(word)) {
					if (map2.containsKey(word)) {
						Integer wordfrequency = map2.get(word);
						map2.put(word, wordfrequency + 1);
					} else {
						map2.put(word, map1.get(word) + 1);
					}
				}
			}
		}
		readfile1.close();
		readfile2.close();
		
		// treemap      set    ArrayList ,        Map.Entry,
		//  TreeMap  entrySet()         Map.Entry  ,  Map.Entry     。
		// treemap  ArrayList      Collections   sort()      
		List> list = new ArrayList>(map2.entrySet());
		Comparator> comparator = new Comparator>() {
			@Override
			public int compare(Entry o1, Entry o2) {
				return (o2.getValue().compareTo(o1.getValue()));
			}
		};
		Collections.sort(list,comparator);
		
		for(int i=0; i<3; i++) {
			System.out.println(list.get(i).getKey() + ":" + list.get(i).getValue());
		}
	}
}