计数字母频率bug

时间:2016-12-05 17:59:04

标签: java

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

我已设法按升序打印键,但是我得到了一个' :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&amp;&amp; c!=&#39;&#39;)或hmap.put(c,1)行。

2 个答案:

答案 0 :(得分:1)

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

此处您只是在更新号码时检查它是否为空格。因此,第一次找到空格时,它会被插入地图中。所以你需要检查两种情况下它不是空格。

例如

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

答案 1 :(得分:0)

您好我认为您的数据文件存在问题。如果有&#34;我会得到与你相同的结果。 &#34;此文件中的空格字符。请发布您的数据文件。