【问题标题】:Java FileReader put ((char) i), k++) in HashMapJava FileReader put ((char) i), k++) in HashMap
【发布时间】:2018-10-24 12:30:30
【问题描述】:

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

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 中的字母数。

异常说:put (Character, Integer) in Map cannot be applied to (char)

如何读取位置 i 处 Character 类型的值并将其用作键以将值放入我的 HashMap 中?

提前致谢。

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

【问题讨论】:

  • 如果 reader.read() 产生的字母超出范围 'A' - 'Z' 怎么办?
  • @Arvind 我还没到。上学了,我一步一步来。
  • 你打了一个小错字:lcount.put((char) i) ,k++);,应该是lcount.put(((char) i) ,k++);lcount.put((char) i ,k++);
  • 请注意char != Character
  • @Ferrybig 哦,谢谢!就是这样。愚蠢的我。

标签: java hashmap filereader


【解决方案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);
}

【讨论】:

  • 我无法将 HashMap 中的字符应用于 char。 (char) i) 是有问题的部分,因为它的类型错误。
  • @FFRA 我刚刚注意到你在(char) i 之后多了一个)
【解决方案2】:

没有方法get():

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

【讨论】:

    猜你喜欢
    • 2014-10-29
    • 2022-12-27
    • 1970-01-01
    • 2014-05-09
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多