crs.one: Problem bei Scanner useDelimiter

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.

  1. 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();  
              }  
           }  
    
    
  2. 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