zeichenweise auslesen aus datei und ausgabe als histogramm

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • zeichenweise auslesen aus datei und ausgabe als histogramm

    hi leute,

    habe mal folgendes Problem. Ich habe eine Datei mit folgendem Inhalt.Java macht Spass. Nun will ich diese Datei auslesen, und zwar zeichenweise. Zum Speichern der Zeichen nehme ich ein Hashtable. Je nachdem wie oft das Zeichen vorkommt, wird ein Sternchen abgespeichert, der die Anzahl repräsentiert.
    Das Prog sieht so aus.


    Quellcode

    1. import java.io.FileNotFoundException;
    2. import java.io.FileReader;
    3. import java.io.IOException;
    4. import java.util.Enumeration;
    5. import java.util.Hashtable;
    6. public class CharCounter {
    7. Hashtable<Character,String> hm = new Hashtable<Character,String>();
    8. FileReader fr;
    9. int c;
    10. public CharCounter() {
    11. try {
    12. fr = new FileReader("text.txt");
    13. leseDaten();
    14. gebeDatenAus();
    15. } catch (IOException e) {
    16. System.out.println("Fehler beim Auslesen der Datei");
    17. }
    18. }
    19. public void leseDaten() throws IOException {
    20. String counter = "";
    21. while((c = fr.read()) != -1){
    22. if(hm.containsKey((char)c)){
    23. counter = (hm.get(c))+"*";
    24. hm.put(new Character((char) c),counter);
    25. }else hm.put(new Character((char) c),"*");
    26. }
    27. fr.close();
    28. }
    29. private void gebeDatenAus() {
    30. Enumeration e = hm.keys();
    31. while(e.hasMoreElements()) {
    32. Object zeichen = e.nextElement();
    33. System.out.println(zeichen + ":\t" + hm.get(zeichen));
    34. }
    35. }
    36. public static void main(String[] args) {
    37. new CharCounter();
    38. }
    39. }
    Alles anzeigen




    Nun das Problem. Beim Ausgeben auf die Konsole tritt folgender Fehler auf.


    p: *
    m: *
    S: *
    h: *
    : null*
    c: *
    J: *
    a: null*
    v: *
    t: *
    s: null*



    Habe ein ähnliches Thema hier im Forum gefunden und es als Beispiel genommen. Das prog war glaube ich von d0nUt.


    danke
  • "dachs" schrieb:

    sieht ja schrecklich aus kann ich das im nachhinein noch editieren?


    hab dein highlighting korrigiert.. generell gibts dazu ja den edit knopf

    hab hier mein Wordcount Programm veröffentlicht:
    http://www.easy-coding.de/java-wordcount-mit-hashtable-t776.html

    zum Problem.. du vergleichst hier 2 Objekte.. also nicht die Inhalte, sondern die Verweise
    kleines Beispiel:

    Quellcode

    1. import java.util.Hashtable;
    2. public class CharCounter {
    3. Hashtable<Character,String> hm = new Hashtable<Character,String>();
    4. public CharCounter() {
    5. char c = 'c';
    6. hm.put(c, "*asdasd");
    7. char d = 'd';
    8. System.out.println(hm.get(d));
    9. System.out.println(hm.get(c));
    10. }
    11. public static void main(String[] args) {
    12. new CharCounter();
    13. }
    14. }
    Alles anzeigen


    Ausgabe:
    null
    *asdasd