java - 在 Map<> 中设置 <>,打印所有内容?

标签 java dictionary

我想读取一个 .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/

相关文章:

javascript - JavaScript forEach 方法有什么用(map 做不到)?

c++ - 在 3D 空间中表示节点的最佳数据结构是什么?

java - 需要根据名词的最后一个字母输出前缀

c# - 为什么在对象完全反序列化之前调用 Equals 方法?

android - map android中的对话框

java - 在 Tomcat 9 上托管 Spring Boot 出现 404 错误

python - 如何使用列表中的随机抽取重新映射 pandas 列中的值?

java - 如何解决java.lang.ClassNotFoundException:org.gradle.wrapper.GradleWrapperMain错误?

java - Spring Boot 中的记录器问题

java - 多线程访问Memcached