Java FileReader 在 HashMap 中放置 ((char) i), k++)

Java FileReader put ((char) i), k++) in HashMap

提问人:fritzweatshirt 提问时间:10/24/2018 最后编辑:fritzweatshirt 更新时间:10/24/2018 访问量:69

问:

我正在尝试读取文件的内容并计算每个字母出现的频率。这是我的情况:

public static void readFile() throws Exception {

    Map<Character, Integer> lcount = new HashMap<>();

    for (Character letter = 'A'; letter <= 'Z'; letter++) {
        lcount.put(letter, 0);
    }

    try {
        FileReader reader = new FileReader("file.txt");
        for (int i = 1; i != -1; i = reader.read()) {
            int k = lcount.get((char) i);
            lcount.put((char) i) ,k++);
        }
    } catch (FileNotFoundException e) {
        System.out.println("The file does not exist.");
    }
}

我不能使用 ((char) i, k++) 来增加我的 HashMap 中的字母数。

异常说:Map 中的 put (Character, Integer) 不能应用于 (char)

如何在位置 i 读取 Character 类型的值并将其用作键以在我的 HashMap 中为其添加值?

提前致谢。

编辑:感谢@Ferrybig。我只是错过了一个“(”。我以为是关于 变量类型。

Java HashMap FileReader

评论

0赞 10/24/2018
如果产生超出范围“A”-“Z”的字母怎么办?reader.read()
0赞 fritzweatshirt 10/24/2018
@Arvind我还没到那儿。这是为了上学,所以我会一步一步地走。
0赞 Ferrybig 10/24/2018
你打了一个小错别字:,应该是或lcount.put((char) i) ,k++);lcount.put(((char) i) ,k++);lcount.put((char) i ,k++);
0赞 Tedil 10/24/2018
请注意,char != Character
0赞 fritzweatshirt 10/24/2018
@Ferrybig 哦,谢谢!就是这样。愚蠢的我。

答:

0赞 Eran 10/24/2018 #1

用:k + 1

for (int i = 1; i != -1; i = reader.read()) {
    int k = lcount.get((char) i);
    lcount.put((char) i, k + 1);
}

k++返回 (在增量之前)的原始值。k

艺术

for (int i = 1; i != -1; i = reader.read()) {
    lcount.put((char) i, lcount.get((char) i) + 1);
}

评论

0赞 fritzweatshirt 10/24/2018
我无法将 HashMap 中的 Character 应用于 char。 (char) i) 是有问题的部分,因为它的类型错误。
0赞 Eran 10/24/2018
@FFRA我刚刚注意到你有一个额外的.)(char) i
0赞 Ilya 10/24/2018 #2

没有方法 get():

for (int i = 1; i != -1; i = reader.read()) {
    lcount.compute((char) i, (x, i) -> i + 1);
}