こんにちは、javaのHashMap
を使用して小さなスニペットを書いています。私の目的は、ファイルから読み込み、ファイル内の異なる文字の頻度を取得することです。出力はこのような何かを印刷する必要がありますHashMapのcontainsKeyメソッドがjavaにありますか?文字を入れると整数がチェックされますか?
ppp-iii
:私のファイルの例は、input.txt
と呼ばれるために、私はこのテキストを持っています。
p : 3
i : 3
- : 1
しかし、私はここに、この
p : 1
i : 1
- : 1
を得続ける私のコードです:
public class Apples {
public static void main(String[] args) throws FileNotFoundException, IOException {
RandomAccessFile fr = new RandomAccessFile("input.txt", "r");
HashMap<Character, Integer> charFreqMap = new HashMap<Character, Integer>();
int ch;
while((ch = fr.read()) != -1){
if(!charFreqMap.containsKey(ch)){
charFreqMap.put((char)ch, 1);
/* I am reading an int ch, but I am adding a typecasted char ch to the
hashmap, so maybe my hashmap is never going to else block.*/
}
else{
int prev = charFreqMap.get(ch);
charFreqMap.remove(ch);
prev = prev + 1;
charFreqMap.put((char)ch, prev);
}
}
fr.seek(0);
for(Map.Entry<Character, Integer> kv: charFreqMap.entrySet()){
System.out.println(kv.getKey()+"\t:\t"+kv.getValue());
}
}
}
私のファイルの各文字が取得する前記私は正しい出力を印刷できるように、だから私は助けを必要とそれは発生回数(すなわち頻度)が正しく出力されます。
あなたは 'charFreqMap.remove(ch);'を実行する必要はありません。 'Map.put'は値を置き換えると常に値を置き換えます。 –
'containsKey((char)ch)'と 'get((char)ch)'です。 int型はIntegerにボックス化され、Integers型はCharactersと等しくありません。 –
オートボクシングは、対応する参照タイプで動作します。 'char'を入力すると' Character'になります。 'int'を指定すると' Integer'になります。 'Character'は決して' Integer'に等しくなく、 'Integer'は決して' Character'に等しくありません。 – Savior