(BufferedReader) inLine() "verschluckt" zeilen ?

Status
Nicht offen für weitere Antworten.

dh81

Neues Mitglied
hallo,
folgendes problem: ich habe in einer datei eine wortliste mit tausenden von einträgen. diese sollen in ein listen-array gesteckt werden (29 felder entsprechend alphabet samt umlauten). an und für sich klappt das, was ich da so zusammengebastelt hab, recht prima, allerdings ist mir beim nachzählen in excel aufgefallen, dass da einige einträge fehlen (z.b mit "A" beginnend 733:258, also um die zwo drittel). waran könnte das liegen, wie könnte man das fixen???

Code:
 public static int charToIndex(char c){
  int output = (int)c;
  switch(output){
    case 196: output = 26; break;
    case 214: output = 27; break;
    case 220: output = 28; break;
    default: output = output -65;  
  }
  return output;
  }
  
  /* testEinlesenUndSortieren liest aus einer unicode-txt-datei zeilenweise als string ein
   * in abhängigkeit zum anfangsbuchstaben wird das wort in einem 29-feldigen List-array gespeichert
   * der index für das array-feld wird über charToIndex beschafft
   * zurückgegeben wird befüllt das übergebene List-Array
   */ 
  
  
  public static void textEinlesenUndSortieren(java.util.List[] list){
  String tmp;
   try{
      BufferedReader in = new BufferedReader(new FileReader("muh.txt"));
      while(in.readLine() != null){
        tmp = (String)in.readLine();
        tmp.trim(); 
        if(tmp.length()>=5 && tmp.length()<=10){
        tmp = tmp.toUpperCase(); 
        list[Quellen.charToIndex(tmp.charAt(0))].add(tmp); 
        }
      }
      in.close();
    }
   catch (Exception e) {};
  }
 

madboy

Top Contributor
Ich vermute mal, dass ziemlich genau die Hälfte deiner Einträge fehlt ;-)

Code:
      while(in.readLine() != null){ //liest eine Zeile, die wird aber nirgends gespeichert
        tmp = (String)in.readLine(); //lese nächste Zeile, die wird nach tmp geschrieben

Besser:
Code:
while((tmp = in.readLine()) != null)
...
tmp.trim(); //bringt nix. Strings sind unveränderlich.  Ersetze durch
tmp = tmp.trim();

Was grundsätzliches noch: warum testest du mit einer Datei mit MEHREREN TAUSEND Einträgen? Wenn da was fehlt/schief läuft, wirst du das nur schwerlich rausfinden... Nimm ne Datei mit 1 Eintrag, schau ob es klappt. Dann nimm 2 Einträge. Dann meinetwegen 10 und dann 100. Schau auch obs mit ungeraden Anzahlen klappt (101 Einträge) usw.


Ach ja: für sowas würde ich eine Map (HashMap oder TreeMap falls sortiert werden soll) nehmen. Als key den Anfangsbuchstaben (Character evtl. geht auch char, weiß ich grad nicht), als Value eine List der Wörter.

Beispiel (evtl. Fehler mit drinne ;-) )
Code:
HashMap <Character, ArrayList<String>>map = new HashMap<Character, ArrayList<String>>();
while(...) {
if(map.get(tmp.CharAt(0)) == null) {
  map.put(tmp.CharAt(0), new ArrayList<String>());
}
map.get(tmp.CharAt(0)).add(tmp);
}
 

dh81

Neues Mitglied
moin, danke erstmal
wie vorher beschrieben fehlen 2/3 der einträge. dank deines ersten korrekturvorschlags bin ich jetzt von 233 auf 504 (von 733).

komisch:
beim .toUpperCase() hab ichs richtig gemacht und beim .trim() den anfänger raushängen lassen. vielleicht sollte ich nachts besser schlafen und nich am rechner sitzen...

zum umfang:
zum testen nehme ich nur jene mit a. dann aber auch alle, damit ich sehen kann ob auch wirklich nur die der bedingung length in [5;10] genügenden in die liste geraten sind und ob auch alle in großbuchstaben sind.

das mit der map muss ich ma genauer angucken. all die listen sind für mich mühsam erlesenes neuland. hatten sowas im studium nicht.


nachtrag:
übernächtigter trottel am werk. hab noch ma richtig nachgezählt (hatte die bedingung <=10 vergessen). das ergebnis ist nun doch wunschgemäß und es fehlte so ziemlich die hälfte.

problem gelöst, thema abgehakt...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Socket.setSoTimeout -> BufferedReader -> Default value Allgemeine Java-Themen 4
kodela Unterschiedliches Verhalten von BufferedReader Allgemeine Java-Themen 3
D BufferedReader bricht nach 1248 Iterationen ab Allgemeine Java-Themen 14
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
A BufferedReader ohne System.in Allgemeine Java-Themen 9
J BufferedReader Datei einlesen Allgemeine Java-Themen 8
Messoras Der BufferedReader mag mich nicht Allgemeine Java-Themen 47
C Threading mit BufferedReader/InputStream & sockets Allgemeine Java-Themen 0
J BufferedReader OutOfMemory umgehen? Allgemeine Java-Themen 10
B Input/Output BufferedReader Allgemeine Java-Themen 3
O BufferedReader von ganz unten anfangen zu lesen Allgemeine Java-Themen 7
S BufferedReader/PrintWriter an einer HTML Allgemeine Java-Themen 6
M BufferedReader: Vom Logfile zur Datenbank Allgemeine Java-Themen 6
S Null Pointer Exception bei BufferedReader Allgemeine Java-Themen 4
K BufferedReader.readLine erkennt Zeilenende nicht Allgemeine Java-Themen 11
D 'InputStreamReader' & 'BufferedReader' führen zu "cannot find symbol"-Fehler Allgemeine Java-Themen 3
D Scanner leer aber bufferedReader nicht?! Allgemeine Java-Themen 2
A bufferedReader readline, encoding Allgemeine Java-Themen 5
V wie bufferedreader.readline() unterbrechen? Allgemeine Java-Themen 4
Developer_X Java BufferedReader mit URL Allgemeine Java-Themen 5
D BufferedREader#readLine Allgemeine Java-Themen 20
Semox Fehler - Zuweisung aus BufferedReader an Variable Allgemeine Java-Themen 3
S Exception beim BufferedReader Allgemeine Java-Themen 3
J BufferedReader br.readLine(); Allgemeine Java-Themen 22
G getFilePointer in BufferedReader? Allgemeine Java-Themen 2
M BufferedReader.read(char[] cbuf) liefert falsche Werte? Allgemeine Java-Themen 4
W Frage zu BufferedReader Allgemeine Java-Themen 2
conan2 BufferedReader.readLine() von anderem Thread aus beenden Allgemeine Java-Themen 4
K Wie kann ich einen BufferedReader beschleunigen? Allgemeine Java-Themen 4
N readLine() von BufferedReader hält das Programm fest/auf! Allgemeine Java-Themen 10
B while mit BufferedReader beenden Allgemeine Java-Themen 5
F Zu große Werte beim byteweisen Lesen mit BufferedReader.read Allgemeine Java-Themen 5
S BufferedReader problem Allgemeine Java-Themen 11
D BufferedReader in image umwandeln Allgemeine Java-Themen 3
M BufferedReader input - hängt sich auf Allgemeine Java-Themen 4
C Probleme mit URL und BufferedReader Allgemeine Java-Themen 6
C BufferedReader oder DataInputStream Allgemeine Java-Themen 4
M Store a String in a BufferedReader Allgemeine Java-Themen 2
D Exception verschluckt Messageteil Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben