为什么我的字母字符频率为0?

时间:2014-04-02 19:52:11

标签: java frequency alphabet

我的程序读取一个单词文件,我试图打印字母表中每个字母开头的单词的频率。但是我的频率不断出现为" 0"。谁能帮我?这是我的计划:

    while (in.hasNext())
    {
        words.add(in.next());
    }
    in.close();
    aFileReader.close();

    for(int i = 0; i < chars.length - 1; i++)
    {
        int counter = 0;
        for(int j = 0; j < words.size(); j++)
        {
            String temp = words.get(j);
            String letter = temp.substring(0);
            if(letter.equalsIgnoreCase(chars[i]))
                counter++;
        }
        results += chars[i] + " = " + counter + "\n";
    }
    JOptionPane.showMessageDialog(null,results);

2 个答案:

答案 0 :(得分:3)

您的letter子字符串错误。您正在从temp的字符0到temp的结尾处获得子字符串。您想要.substring(0, 1),或者更好,.charAt(0)

您可以利用Java char类型实际上是一个数字的事实,而不是将一个字符数组进行比较。

while (in.hasNext()) {
    words.add(in.next().toLowerCase());
}
in.close();
aFileReader.close();

int[] counter = new int[24];

for(int i = 0; i < words.size(); i++) {
    String temp = words.get(i);
    int letterIndex = temp.charAt(0) - 'a'
    if(letterIndex >= 0 && letterIndex < counter.length)
        counter[letterIndex]++;
}
for (int i = 0; i < counter.length; i++) {
    results += ((char)('a' + i)) + " = " + counter[i] + "\n";
}
JOptionPane.showMessageDialog(null,results);

答案 1 :(得分:0)

temp.substring (0)会返回整个temp字符串,您应该将其替换为temp.charAt (0)