2016-04-30 23 views
5

Ich habe Probleme beim Lesen einer Zeichenfolge und ein Double aus einer TXT-Datei. Hier ist meine txt-Datei:Müssen String und Double aus Datei lesen

Mike 300.50 
John 260 
Lisa 425.33 

Und hier ist der Code, den ich sie lesen bin mit:

reader = new Scanner(); 
while(reader.hasNext()){ 
    name= reader.next(); 
    salary = reader.nextDouble(); 
    System.out.println(name + " " + salary + "\r\n"); 
} 

Immer wenn ich diesen Code ausführen, Exception in thread "main" java.util.InputMismatchException erscheint mir zu sagen, das Problem ist in nextDouble().

Weiß jemand, wie man das löst?

+0

Die 'nextDouble()' verlässt die Newline, so dass Ihr zweiter Aufruf von 'next()' den Zeilenumbruch verbraucht und Sie dann versuchen, den nächsten Namen als Doppelklick zu parsen. Ich schlage vor, Sie lesen eine ganze Zeile nach der anderen. –

+0

Dadurch kann ich nicht beide Dinge in verschiedenen Attributen speichern. Oder kann ich? – Tom

Antwort

0

Sie könnten auf diese Weise versuchen:

while(reader.hasNextLine()){ 
    String[] values = reader.nextLine().split("\\s+"); 
    name= values[0]; 
    salary = Double.valueOf(values[1]); 
    System.out.println(name + " " + salary + "\r\n"); 
} 
+0

Tut mir leid, aber was machen diese Zeilen? Vielen Dank. – Tom

+0

Ich wollte diese Zeilen tun: Name = Werte [0]; Gehalt = Double.valueOf (Werte [1]); – Tom

+0

'' reader.nextLine(). Split ("\\ s +"); '' Zerlegt eine einzelne Zeile mit dem Leerzeichen und speichert sie in einem String-Array. Also bekomme ich String Name von '' values ​​[0] '' erstes Element von Array und '' Double.valueOf (Werte [1]) '' Parsing zweites Element zu double – mmuzahid

-1

Sie java.io.StreamTokenizer verwenden können, String und doppelt zu lesen. StreamTokenizer Split-Datei in Token mit geeigneten Datentyp. und mithilfe einiger Konstanten können Sie den Tokentyp identifizieren. wie TT_NUMBER, TT_WORD

File f=new File("path of file"); 
StreamTokenizer st=new StreamTokenizer(new FileInputStream(file)); 
while(st.nextToken()!=StreamTokenizer.TT_EOF) //getting contents of file{ 
    switch(st.ttype) 
    { 
     case StreamTokenizer.TT_EOF: break; 
     case StreamTokenizer.TT_NUMBER://it will read number always in double data type 
      no=st.nval; 
     break; 
     case StreamTokenizer.TT_WORD: 
      name=st.nval; 
     break; 
    }} 
+0

Warum wurde das abgelehnt? – Basilevs

3
reader = new Scanner(); 
while(reader.hasNext()){ 
    name= reader.next();  
    salary = reader.nextDouble(); 
    System.out.println(name + " " + salary + "\r\n"); 
    reader.nextLine(); 
} 

Versuchen Sie dies. Was passiert ist, dass der Scanner die leere Zeile nach jedem Doppel liest, so wird der Name die Leerzeile sein, und es wird (zum Beispiel) John als Gehalt lesen und Ihnen diese Ausnahme geben. Also, was ich getan habe, war, fügen Sie diese kleine Zeile Code: reader.nextLine();, so dass es diese leere Zeile überspringen konnte. Hoffe das hilft.