package set;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class Exercise21_08 {
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.out.println("Invalid length");
} else {
File file = new File(args[0]);
if (!file.exists())
System.out.println("File " + file + "does not exist");
else
countWordOccurrence(file);
}
}
/** 统计文件中单词出现频率 */
public static void countWordOccurrence(File file) throws IOException {
Map<String, Integer> map = new TreeMap<>(); //树映射表
try(Scanner input = new Scanner(file)) {
while (input.hasNextLine()) {
String text = input.nextLine();
String[] words = text.split("[ ,.:;'\"{}()?\\[\\]]");
for (int i = 0; i < words.length; i++) {
String key = words[i].toLowerCase().trim();
//添加单词
if (key.length() > 0 && Character.isLetter(key.charAt(0))) {
if (!map.containsKey(key))
map.put(key, 1);
else
map.put(key, map.get(key)+1);
}
}
}
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry: entrySet) //输出单词和数目
System.out.println(String.format("%-10d%10s", entry.getValue(), entry.getKey()));
}
}
}