Frage von BasisFitness, 46

Java if -Bedingung?

Bei dem Code wird aus einer txt Datei jeweils eine Zeile zu Aktivitäten eingelesen. Diese beginnen entweder mit "Cardiotraining " oder "Krafttraining ". Wenn Cardiotraining ausgewählt wurde soll das, was in der if-Bedingung steht geschehen. Die Bedingung trifft bei 2 Zeilen zu. Allerdings wird nur bei der ersten Zeile auch die if-Bedingung erreicht, was über println überprüft wurde. Warum komme ich nicht immer in die Bedingung, obwohl sie eigentlich zutrifft.

    while((speicher = br4.readLine()) != null){
    
    String[] split = speicher.split("§");

    String einheit = split[0];
    System.out.println(einheit);
    
    if(einheit.equals("Cardiotraining ")){
        System.out.println("if");
    }

}                               
Antwort
von Suboptimierer, 38

Schau mal in einem Hexeditor, ob beim zweiten Soll-Fund wirklich der Vergleich true liefern sollte, also ob Leerzeichen und versteckte Zeichen, Großschreibung usw. identisch sind.

Tipp nochmal die Soll-Fund-Zeilen in der Textdatei manuell neu ein.
Füge am Ende der Datei noch eine Zeile mit Dummydaten ein.

Kommentar von BasisFitness ,

Hab ich alles bereits überprüft :/ sollte eigentlich überein stimmen

Kommentar von Suboptimierer ,

Dann tippe testweise mal in der Datei statt "Cardiotraining " "x" und frag in deinem Programm auf "x" ab.

Kommentar von BasisFitness ,

springt wieder nur beim ersten x in die if-Bedingung. Langsam versteh ich gar nichts mehr...

Kommentar von Suboptimierer ,

Aber x wird zweimal augegeben (erster printbefehl)?

Kommentar von BasisFitness ,

ja

Antwort
von Schachpapa, 24

Du prüfst auf "Cardiotraining"+Leerzeichen.

Schreib mal in der Kontrollzeile

System.out.println(einheit+"!");

um zu prüfen, ob da tatsächlich nach Cardiotraining das eine Leerzeichen kommt. Und prüfe ob gilt

einheit.charAt(einheit.length()-1) == 0x20

um auszuschließen, dass es ein anderes Whitespace-Zeichen ist.

Kommentar von BasisFitness ,

Es befindet sich tatsächlich ein leerzeichen an letzter stelle. bringt mich aber auch nicht weiter

Antwort
von Etter, 8

Magste mal die beispielhafte Textdatei posten?

Und vll. den kompletten Quellcode?

Antwort
von BasisFitness, 12

So das Problem hat sich geklärt:

Ich habe erst die Länge abgefragt und festgestellt, dass sie beim ersten 16 beträgt und beim zweiten 15 beträgt. Liegt wohl daran, dass es sich um die erste Zeile des txt Dokumentes handelt. Also habe ich eine neue erste Zeile ohne Bedeutung eingefügt. Hat immer noch nicht funktioniert :/ 

Allerdings frage ich jetzt einfach die Länge des Objekts ab(ist jetzt einheitlich 15) und es funktioniert!

Danke für die Antworten

Kommentar von Etter ,

Haste mal versucht Scanner zu verwenden, statt einem DataInputStream?

Oder biste an die Benutzung davon gebunden?

Kommentar von Etter ,
Antwort
von CarolaA, 3

Du fragst auf "Cardiotraining " ab und damit muss auch eine Leerzeichen enthalten sein!!

Einfach Leerzeichen im if weg, dann müsste es auch gehen!

Liebe Grüße, CarolaA.

Antwort
von DexterNemrod, 22

Ist die Zeile, die nicht erkannt wird, die letzte im Dokument?

Wenn ja könnte es daran liegen, dass readLine Funktion nach einem Zeilenumbruch sucht - aber in der letzten Zeile keinen findet sondern nur das Dateiende. Wenn das der Fall ist füge einfach am Ende der eingelesenen Datei einen Zeilenumbruch ein und teste noch einmal.

Keine passende Antwort gefunden?

Fragen Sie die Community