java - 计算字母频率错误

标签 java

我正在创建一个程序,该程序读取 txt 文件并计算符号/字母/数字的频率。到目前为止,我已经使用 HashMap 来存储这些值并将它们打印到屏幕上(按字母顺序)。

我已经设法按升序打印 key ,但是我在列表开头得到一个“:1”,我似乎不知道哪里出了问题。

public class abc {
public static void main(String[] args) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader("C:\\random20000.txt"));
    HashMap<Character, Integer> hmap = new HashMap<Character, Integer>();

    String s = reader.readLine();
    for (int i = 0; i < s.length(); i ++) {
        char c = s.charAt(i);
        Integer val = hmap.get(new Character(c));
        if (val != null && c != ' ') {
            hmap.put(c,  new Integer(val + 1));
        }
        else {
            hmap.put(c, 1);
        }

    }
    reader.close();



    System.out.println("Hash Map Before Sorting");
    Set set = hmap.entrySet();
    Iterator iterator = set.iterator();
    while (iterator.hasNext()) {
        Map.Entry<Character, Integer> me = (Map.Entry<Character, Integer>)iterator.next();
        System.out.print(me.getKey() + ": ");
        System.out.println(me.getValue());
    }

我有一种感觉,要么是 (val != null && c != ' ') 要么是 hmap.put(c,1) 行。

最佳答案

Integer val = hmap.get(new Character(c));
if (val != null && c != ' ') {
    hmap.put(c,  new Integer(val + 1));
}
else {
    hmap.put(c, 1);
}

这里,您仅在更新号码时检查它是否为空格。因此,第一次找到空间时,会将其插入到 map 中。因此,您需要检查这两种情况下都不是空格。

例如类似

if (c != ' ') {
    Integer val = hmap.get(new Character(c));
    if (val != null) {
        hmap.put(c,  new Integer(val + 1));
    }
    else {
        hmap.put(c, 1);
    }
}

关于java - 计算字母频率错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40980428/

相关文章:

java - 循环遍历 Drawable 资源?

java - 克隆谓词

java - 如何以编程方式在 java 中编辑 swagger yaml 文件以将请求参数添加到 REST 端点?

java - 使用arraylist而不是array

java - Debian SSL 证书错误 : cannot verify xxx certificate/javax.net.ssl.SSLHandshakeException

java - 组合算法

java - 无法使用 Jersey2.0 提供静态内容

java - 具有内存后端的嵌入式 OpenDS LDAP 服务器

java - 从 jar 中获取 ActiveMQ 版本

java - 抑制子类的警告