java - 如果我在其中放入字符,HashMap 中的 containsKey 方法会检查整数吗?

标签 java file-io hashmap filereader randomaccessfile

您好,我使用 java 中的 HashMap 编写了一小段代码。我的目标是从文件中读取并获取文件中不同字符的频率。例如,在我名为 input.txt 的文件中,我有以下文本:

ppp-iii 

输出应该打印类似这样的内容。

p   :   3
i   :   3
-   :   1

但我一直收到这个

p   :   1
i   :   1
-   :   1

这是我的代码:

public class Apples {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        RandomAccessFile fr = new RandomAccessFile("input.txt", "r");
        HashMap<Character, Integer> charFreqMap = new HashMap<Character, Integer>();
        int ch;
        while((ch = fr.read()) != -1){
            if(!charFreqMap.containsKey(ch)){
                charFreqMap.put((char)ch, 1); 
                /* I am reading an int ch, but I am adding a typecasted char ch to the
                hashmap, so maybe my hashmap is never going to else block.*/
            }
            else{
                int prev = charFreqMap.get(ch);
                charFreqMap.remove(ch);
                prev = prev + 1;
                charFreqMap.put((char)ch, prev);
            }
        }
        fr.seek(0);
        for(Map.Entry<Character, Integer> kv: charFreqMap.entrySet()){
            System.out.println(kv.getKey()+"\t:\t"+kv.getValue());
        }
    }
}

所以我需要帮助,以便我可以打印正确的输出,其中文件中的每个字符都被读取,并且它的出现次数(即它的频率)被正确打印出来。

最佳答案

不,您的示例输出清楚地表明了这一点:)

请注意,Map.getMap.containsKey 采用 Object 作为参数,而不是键类型。

当您传递 int 变量时,该变量会被装箱为 Integer

如果您已将 Character 实例放入 map 中,则这些实例都不是 Integer。两者IntegerCharacter即使 Character.intValue() == Integer.intValue(),也只会将自己分别报告为等于另一个 IntegerCharacter

您需要在 getcontainsKey 调用中将参数强制转换为 char,以使其按预期工作。

关于java - 如果我在其中放入字符,HashMap 中的 containsKey 方法会检查整数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797961/

相关文章:

java - 在 POM 中为 Maven 指定路径

c++ - 使用 c++0x - 安全吗?

hashmap - 将值添加到与 Lisp 中的 HashMap 表中的列表相同的键

java - 是否有 c#'s ' int?相当于java中的吗?

java - 在 kotlin 项目上使用 java 文件

java - 如何制作数组的数组

r - 是否可以将 SAS infile 语句转换为 R 代码?

python - python 列表中的循环不递增

javascript - 使 Gulp 任务同步,而无需创建一堆其他任务

java - 如何在 Android 中按值对 HashMap<String , Byte> 进行排序?