0

我有一个将单个单词作为字符串返回的方法。我需要计算读取文本块的方法返回的所有单词。问题是我的计数正确但输出错误。它在重复。不太确定哪里出了问题?

private int totalWords    = 0;
private static Map<String, Integer> wordFrequency = new HashMap<String, Integer>();


public static void findResult(CharacterReader characterReader)
{
    boolean x = true;
    CharBuffer buffer = CharBuffer.allocate(100);
    String str = "";
    try
    {

        while(x)
        {
        char cha = characterReader.getNextChar();
        Set<Character> charSet = new HashSet<Character>();
            charSet.add(',');
            charSet.add('.');
            charSet.add(';');
            charSet.add(':');
            charSet.add('\'');
            charSet.add('~');
            charSet.add('?');
            charSet.add('!');
            charSet.add('%');


            while(cha != ' ' && !charSet.contains(cha))
            {
                buffer.put(cha);
                cha = characterReader.getNextChar();
            }
            buffer.flip();
            str = buffer.toString();
            buffer.clear();



            countWords(str);

            System.out.println(wordFrequency);

        }
    }catch(EOFException e)

    {
        x = false;
    }


private static void countWords(String word)
        {

                if (wordFrequency.containsKey(word))
                {
                    Integer count = wordFrequency.get(word);
                    count++;
                    wordFrequency.put(word, count);
                    } else {
                    wordFrequency.put(word, 1);
                }
        }

public static void main (String args[])
{
    CharacterReader cr = new SimpleCharacterReader();
    findResult(cr);
}
4

3 回答 3

1

移动

System.out.println(wordFrequency);

到 try 语句之外。您在每个单词之后打印整套。

于 2012-06-19T01:43:12.823 回答
0

Try moving System.out.println(wordFrequency); out of the while loop braces...

于 2012-06-19T02:51:58.133 回答
0

这一切都在您放置 System.out.println 的地方。你已经把它放在循环里面了!

    while(x) {
        // .....

        countWords(str);

        System.out.println(wordFrequency);
    }

解决方案:在循环之后执行。

    while(x) {
        // .....

        countWords(str);

    }
    System.out.println(wordFrequency);
于 2012-06-19T01:42:32.963 回答