Hallo Ich schrieb einen kleinen Codeausschnitt mit HashMap
von Java. Mein Ziel ist es, aus einer Datei zu lesen und die Häufigkeit verschiedener Zeichen in der Datei zu ermitteln. Zum Beispiel in meiner Datei input.txt
genannt, habe ich diesen Text:Wird die Methode ContainsKey von HashMap in Java nach einer Ganzzahl suchen, wenn ich ein Zeichen darin lege?
ppp-iii
Die Ausgabe in etwa so gedruckt werden soll.
p : 3
i : 3
- : 1
Aber ich bekomme immer wieder diese
p : 1
i : 1
- : 1
Hier ist mein Code:
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());
}
}
}
Also ich brauche Hilfe, damit ich die richtige Ausgabe drucken, wobei jedes Zeichen in meiner Datei bekommt lesen und es wird die Anzahl der Vorkommen (dh die Häufigkeit) korrekt ausgedruckt.
Übrigens müssen Sie 'charFreqMap.remove (ch);'. 'Map.put' ersetzt immer den Wert, wenn Sie es erneut eingeben. –
'containsKey ((char) ch)' und 'get ((char) ch)'. Ein int würde mit einer Ganzzahl eingerahmt werden, und Ganzzahlen sind nicht gleich Zeichen. –
Autoboxing arbeitet mit dem entsprechenden Referenztyp. Wenn Sie ein "Char" einrahmen, wird es zu einem "Character". Wenn Sie ein "int" boxen, wird es zu einem "Integer". Ein 'Zeichen' ist niemals gleich 'Integer' und ein' Integer' ist niemals gleich' Zeichen'. – Savior