我想读取一个 .txt
文件,获取该文本中的所有单词,并以某种方式打印出每个单词在文本中出现的次数。
例如,拿这段文字:
"A bright day a man walked into a bar and asked for a beer. He was denied the beer because he was a sheep"
应该给这个:
5: a
2: he, beer
1: bright, day, walked, into, bar, asked, denied, was, the,because, man, and, for
这是我的代码:
private void computeFrequencyMap() throws IOException {
TreeMap<String, Integer> dMap = new TreeMap<String, Integer>();
BufferedReader br = new BufferedReader(new FileReader(filen));
String line;
while( (line = br.readLine()) != null){
String [] words = line.split("\\s+");
for (String word : words) {
word = word.replaceAll("[^a-zA-Z]", "");
if (!dMap.containsKey(word.toLowerCase())) {
dMap.put(word.toLowerCase(), 1);
} else {
int count = dMap.get(word.toLowerCase());
dMap.put(word.toLowerCase(), count + 1);
}
}
}
TreeMap<Integer, HashSet<String>> sMap = new TreeMap<Integer, HashSet<String>>();
for (Map.Entry<String, Integer> entry : dMap.entrySet()) {
if(sMap.containsKey(entry.getValue())){
//sMap.put(entry.getValue(), entry.getKey());
}else{
sMap.put(entry.getValue(), new HashSet<String>());
}
}
for (Entry<Integer, HashSet<String>> entry : sMap.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
这是我运行代码时得到的结果:
1 []
2 []
3 []
4 []
5 []
6 []
7 []
8 []
9 []
10 []
11 []
12 []
14 []
16 []
18 []
27 []
32 []
33 []
38 []
44 []
54 []
71 []
到目前为止,我还没有搞定“添加到集合”部分,有什么建议吗?
最佳答案
当你反转 map 时,你忘了实际添加单词:
Map<Integer, Set<String>> sMap = new TreeMap<>();
for (Map.Entry<String, Integer> entry : dMap.entrySet()) {
Integer appearances = entry.getValue();
Set<String> words = sMap.get(appearances);
if (words == null) {
words = new HashSet<>();
sMap.put(appearances, words);
}
words.add(entry.getKey());
}
关于java - 在 Map<> 中设置 <>,打印所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36813467/