2016-12-05 6 views
1

私は、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()); 
    } 

私はそれが(ヴァル!= nullを& & C!= '「)またはhmap.put(C、1)ラインのどちらかだ感じています。ここで

+0

テキストファイルに改行やタブなどの空白文字はありますか? – mba12

答えて

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

実際には、スペースが見つかるたびに...それは何度も何度も "1"を書きます。 – dhke

0

こんにちはようなインスタンスのために何か

は、あなたのデータファイルに問題があります。このファイルに空白文字がある場合、あなたと同じ結果が得られます。 "あなたのデータファイルを投稿してください。

関連する問題