Problem bei Scanner useDelimiter
crs.one
- java
hiho zusammen,
folgendes problem beschäftigt mich.
ich versuche aus einer csv-datei (delimiter ";") string und double variablen einzulesen.
nun tritt folgender fehler auf.
sobald der scanner versucht den nächsten double wert zu lesen, bekomme ich einen "java.util.InputMismatchException" fehler.
scheinbar hat der scanner ein problem damit den wert nach dem semicolon als einen double wert zu interpretieren.
hier sind einmal der java auszug und ein beispiel des aufbaus der csv datei.
public void listeEinlesen(String dateiname) throws FileNotFoundException
{
File datei = new File(dateiname);
Scanner scan = new Scanner(datei);
scan.useDelimiter(";");
while(scan.hasNext())
{
String buffer1 = scan.next();
String buffer2 = scan.next();
// hier tritt der fehler auf...beim lesen des nächsten double wertes
double buffer3 = scan.nextDouble();
}
}
der inhalt der csv datei sieht wie folgt aus:
hallo;welt;3,9
zweite;zeile;0,3
...
danke schonmal für tips und anregungen...
ps:
wenn ich einen anderen delimiter in der csv datei verwende, tritt der fehler nicht auf. scheint irgendwie am ";" zu liegen. würde aber gerne csv mit ";" als delimiter verwenden.
public void listeEinlesen(String dateiname) throws FileNotFoundException
{
File datei = new File(dateiname);
Scanner scan = new Scanner(datei);
scan.useDelimiter(";");
while(scan.hasNextLine())
{
String buffer1 = scan.next();
String buffer2 = scan.next();
// hier tritt der fehler auf...beim lesen des nächsten double wertes
double buffer3 = scan.nextDouble();
}
}
code soweit abgeändert, das geprüft wird ob
scan.hasNextLine()
vorhanden ist...
~~~java
...
while(scan.hasNextLine())
{
String buffer1 = scan.next();
String buffer2 = scan.next();
// hier tritt der fehler auf...beim lesen des nächsten double wertes
double buffer3 = scan.nextDouble();
}
}
Hallo,
hallo;welt;3,9
zweite;zeile;0,3
...
Scanner erwartet, daß Dezimalzahlen als Dezimalzeichen einen Punkt(.) verwenden.
Du verwendest ein Komma. Das führt beim internen Gebrauch von Double.parseDouble()
zu einer NumberFormatException, die in deine InputMismatchException gewandelt wird.
Das kann man gut aus dem Code von Scanner.nextDouble() herauslesen. Du solltest
für Dezimalzahlen also den Punkt als Dezimaltrenner verwenden. Dann sollte auch
dein Code funktionieren.
Daß dein Code mit anderen (Scanner-)Trennzeichen funktionieren soll, kann ich
mir nicht vorstellen...
Gruß
Slyh