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());
}
}
}