java - 如何计算字符串 HashMap 中的单词出现次数

标签 java hashmap

我想知道如何修复我的代码以使我的输出正确。我只能编辑代码的特定部分。非常感谢

这是我的代码

import java.util.HashMap;

public class OccurenceChecker {
    public static void main(String[] args) 
    { 

        //CANT BE FIXED
        String phrase = "Good Morning. Welcome to my store. My store is a grocery store.";

        HashMap<String, Integer> map = new HashMap<String, Integer>();
        String[] ignored = phrase.split("\n\t\r(){},:;!?.[]");

        //CAN BE FIX THIS POINT ON.
        for (String ignore : ignored) 
        {
            Integer count = map.get(ignore);
            if (count == null) 
            {
                count = 0;
            }
            map.put(ignore, count + 1);
        }

        for (int i = 0; i< ignored.length; i++)
        {
            System.out.println(ignored[i]);
        }
        System.out.println(map);
    }
}

预期输出

{a=1, Morning=1, grocery=1, Welcome=1, is=1, to=1, store=3, Good=1, my=2}

我的输出

{=2, a=1, Morning=1, grocery=1, Welcome=1, is=1, to=1, store=3, Good=1, my=1, My=1}

最佳答案

一些建议供您考虑:

在正则表达式中,\W 指的是任何不是单词字符的东西(即任何不是字母的东西)。

如果您希望在任何标点符号或空格上进行拆分,那么您应该在正则表达式中的 \W 之后添加一个 +。这会将所有后续的都算作同一定界符的一部分。这就是为什么你目前在你的答案中得到 {=2 (你的输入中有两个“。”的实例,它们被拆分解释为定界符,null,定界符)。

您似乎希望将 'my' 和 'My' 视为相同的字符串。在这种情况下,您应该在将它们添加到 map 之前使用 toLowerCase

如果您使用的是 Java 8,那么在 map 中保持运行增量的一个很好的简单方法是

Map<String,Integer> wordCount = new HashMap<>();
wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);

同样,使用 Java 8,您可以一次性完成所有这些

Map<String,Long> wordCount = Arrays.stream(phrase.toLowerCase().split("\\W+"))
    .collect(Collectors.groupingBy(Function.identy(), Collectors.counting());

关于java - 如何计算字符串 HashMap 中的单词出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32709225/

相关文章:

java - 在 HashMap Key 中输入 3 个属性

java - 安卓服务未启动

java - GWT 按钮 长按鼠标

java - 使用 JNDI 启用 Active Directory 帐户

java - 为什么更改用作 HashMap 中键的对象的哈希码会使查找返回 null?

javascript - 如何将 hashmap 值从 java 文件传递​​到 Javascript

java - 连续遍历 HashMap 需要什么代码?

java - 在 Spring 4 中用什么替换 MethodInvokingTimerTaskFactoryBean?

java - 如何授予Intellij-Idea写入文件的权限?

java - 添加到一个 HashMap,其 Value 部分是另一个 HashMap