如何使用Java代码使用Map完成一个英文演讲稿中单词出现次数的统计,输出演讲稿中出现频率最高的10个单词。
直接分割字符串呗,用正则表达式把分割的符号写出来我能考虑到的是空格逗号问号句号什么的根据这些进行分割,然后把单词存为键出现次数作为值,然后判断每个词在map中有吗 没有新加一个键存值。
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.TreeMap;
public class test01 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("D:\\TextFile\\io\\yanjianggao.txt"));
// 创建map
TreeMap<String, Integer> hm = new TreeMap<>();
// 数组变量接收数据
String[] s;
String readline = br.readLine();
while (readline != null) {
//去掉空白行
if (readline.length() == 0)
readline = br.readLine();
// 去掉符号、统一大小写、去掉首尾空白、以空格分割转为数组
else {
s = readline.replace(" ", " ")
.replace(',', ' ').replace('.', ' ').replace('?', ' ')
.replace('-', ' ').toLowerCase().trim().split(" ");
// 将非空数据存入map中,并统计个数
for (int i = 0; i < s.length; ) {
if ("".equals(s[i])) {
i++;
continue;
}
if (hm.containsKey(s[i])) {
hm.replace(s[i], hm.get(s[i]) + 1);
i++;
} else {
hm.put(s[i], 1);
i++;
}
}
readline = br.readLine();
}
}
// 对map中value值排序
ArrayList<Integer> hm_value = new ArrayList<>();
for (String s1 : hm.keySet()) {
hm_value.add(hm.get(s1));
}
Collections.sort(hm_value);
// 根据value值顺序输出十个单词
for (int i = hm_value.size() - 1; i > hm_value.size() - 11; i--) {
for (String s2 : hm.keySet()) {
if (hm.get(s2) == hm_value.get(i)) {
System.out.println(s2 + ":" + hm.get(s2));
hm.remove(s2);
break;
}
}
}
}
}