2012-06-19 3 views
0

단일 단어를 String으로 반환하는 메서드가 있습니다. 텍스트 덩어리를 읽는 방법으로 반환 된 모든 단어를 계산해야합니다. 문제는 카운트가 맞지만 출력이 잘못되었습니다. 그것은 반복됩니다. 일이 잘못되어가는 것은 확실하지 않습니다.wordCount 주파수가 반복적으로 반환됩니다. Java에서 설정

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); 
} 
+0

출력 : [\t 그것은, 1} {\t 그것은 1 =였다 = 1} {\t 그것은 = 1은 = 1이었다 = 1} {\t = 1, 최고 = 1, = 1, was = 1] – shaz

+1

문자열을 반환하는 위의 메서드가 표시되지 않습니다. 명확히하십시오. –

+0

이것은 잘 문서화 된 주제이므로 검색 기능을 사용하십시오. –

답변

0

System.out.println을 배치 한 곳이 모두 있습니다. 너는 그것을 가지고있다 안에 루프!

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

     countWords(str); 

     System.out.println(wordFrequency); 
    } 

솔루션 : 그것을 할 루프 후.

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

     countWords(str); 

    } 
    System.out.println(wordFrequency); 
+0

감사합니다. 예, 문제였습니다. 또 다른 문제는 공백을 계산하는 것입니다 (예 : {= 16, ~ = 2}). 그것에 대한 어떤 제안? – shaz

+0

@shaz : 트리밍 된 문자열을 테스트하여 맵에 추가하기 전에 비어 있는지 확인하십시오. 가혹하지 않기 위해, 그러나 당신은 당신 자신이이 것을 이해할 수 있어야합니다. –

+0

거칠게 다루지 않을 것. 그것은 절대적으로 좋습니다. 나는 공간 문제를 분류했다. 그래도 고마워. – shaz

1

이동

에서 System.out.println (wordFrequency);

try 문 외부입니다. 각 단어 뒤에 전체 세트를 인쇄하고 있습니다.

0

이동 시도 System.out.println (wordFrequency); while 루프 중괄호 중 ...

+0

@Hovercraft Full of Eels와 같은 대답은 짧습니다. –