Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich arbeite zur Zeit an einem Spaßprojekt, ich versuche ein kleines csv Verarbeitungsprogramm zu schreiben. Zur Zeit hänge ich aber an einer Methode die nicht funktioniert. Sie soll aus einer Textdatei zeilenweise auslesen und diese Strings in eine ArrayList<String> schreiben. Mein Problem liegt jetzt an der Stelle, dass ich ab Zeile 24 keine While Schleife benutzen kann wenn ich prüfen möchte ob eine Zeile in der Datei leer ist. readLine(); springt schon in die nächste Zeile und wenn ich prüfe springt er schon und danach kann ich die nicht mehr speichern. Deswegen hab ich das jetzt mit dem Block 23-30 versucht umzusetzen. Aber hier wird das break einfach missachtet Benutz ich das einfach falsch? Ich weiß is so ähnlich wie ein goto aber ich hab keine ahnung wie ich das anders realisieren soll. Würde mich über Hilfe wirklich freuen auch über Hinweise wie ich das Problem besser lösen kann. Vll ist mein ansatz ja schon komplett falsch.
Java:
import java.io.*;
import java.util.*;
public class CsvHandler {
private String dateiname;
private List<String> liste;
public CsvHandler(String dateiname) {
this.dateiname = dateiname;
this.liste = new ArrayList<String>();
}
public void lesen() throws IOException {
BufferedReader leseBereich = null;
try {
leseBereich = new BufferedReader(new FileReader(this.dateiname));
liste.clear();
nochmal:
{
String a = leseBereich.readLine();
if (a != null) {
liste.add(a);
break nochmal;
}
}
leseBereich.close();
} catch(Exception e) {
System.out.println("Auslesefehler!");
}
}
}
[c]break[/c] ist kein [c]goto[/c], du kannst damit genau an eine Stelle springen, und zwar hinter eine Schleife (wenn kein Label angegeben ist, hinter die direkt umschließende, ansonsten hinter die [mittelbar umschließende] Schleife, vor der das Label steht).
In deinem Fall kannst du den gewünschten Effekt durch eine normale Schleife erreichen:
Java:
for(String a = leseBereich.readLine(); a != null; a = leseBereich.readLine())
liste.add(a);
}
Ok aber wie soll ich eine while Schleife konstruieren? Ich hab es so probiert:
Java:
while (leseBereich.readLine()!=null) {
String a = leseBereich.readLine();
liste.add(a);
}
Aber dabei ist das Problem, dass ich schon in der Bedingungsprüfung der while schleife den String abgreifen müsste, da die Methode readLine immer die nächste Zeile zurück gibt und sobald ich sie zweimal ausführe verlier ich eine Zeile.
NACHTRAG: Probier grade noch Sephrox Hinweis aus.
NACHTRAG 2: Danke Sephrox genau so muss es aussehen. Habs irgendendwie noch nicht so raus mit der Herangehensweise bzw. Denkensart. Danke auch Landei für deine Erklärung des break war mir noch nicht so bewusst und auch für deinen Quellcode.
Ich persönlich finde [c]for[/c] aus zwei Gründen besser:
- Die einzelnen Elemente der Schleife müssen explizit angegeben werden, ich kann also z.B. nicht vergessen, einen Index hochzuzählen oder so
- Die Schleifenvariable (hier a) ist nur im Schleifenkörper sichtbar, man kann also nicht versehentlich nach der Schleife irgend etwas Dummes damit machen
ja ist in manchen Situationen besser aber in z.B. Serverprogrammierung Whilest du ja die ganze Zeit bis ein Wert "reinkommt".
Daher bin ich daran gewöhnt.
@Topic
Du darfst natürlich wie du selbst schon bemerkt hast kein readLine in der While machen , weil dieser ja schon ausgelesen wird und somist bei der abfrage auf !=null verworfen wird. Deshalb habe ich es so geschrieben:
String a = readLine();
So überprüfst du ja nur den String a in der While Schleife... das gelesene bleibt gespeichert und verschwindet somit nicht und dann kannst du mit dem String arbeiten ... ihn speichern oder bearbeiten