2016-07-11 9 views
0

Ich habe eine Frage zu einem Code habe ichJava Scanner delimeter nicht wie ich mit der Arbeit erwartet

package salescities; 
import java.io.File; 
import java.util.Scanner; 

public class SalesCities { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    double totalSales = 0; 
    int count = 0; 
    int missingCount = 0; 
    String line; 
    File file; 
    Scanner input; 
try { 

     file = new File("sales.txt"); 
     input = new Scanner(file); 
     input.useDelimiter(":"); 
     while (input.hasNextLine()) { 
      input.next(); 
      line = input.nextLine(); 
      try{ 
       totalSales += Double.parseDouble(line); 
       count++; 
      } 
      catch(IllegalArgumentException e){ 
       missingCount++; 
      } 

     } 
     input.close(); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    System.out.println(totalSales + " " +missingCount); 
} 

geschrieben haben}

und die Datei im lesen versuchen, ist wie folgt

New York: 23.5678 
New Jersey: no reports 
Rio de Janeiro: 12.3654 

Wenn ich das Programm aber es 0.0 3 druckt, wie alles fehlt. Das Problem ist, wenn ich den Debugger ausführen, um zu sehen, was geschieht, so die Linie parseDouble funktioniert nicht, und ich sah, dass Zeile eine Zeichenfolge, die diese

: 23.5678 

hat, und ich verstehe nicht, warum, wenn ich mit ":" als Delimeter. Ich habe nur die Zahl ohne Doppelpunkt erwartet. Kann mir jemand antworten?

ps: Dies ist eine Übung aus einem Buch, das ziemlich einfach ist, aber das Buch verwendet eine Klasse TextIO, die von ihnen implementiert wird. wollte nur Scanner anstelle von ihrem Code versuchen.

+1

Nicht wirklich eine Antwort, aber nur ein Hinweis: In diesem Fall könnte es einfacher sein, nur string.split (":") in den Zeilen zu verwenden. – Silverclaw

Antwort

0

Scanner#nextLine packt den Rest der Zeile, unabhängig vom Begrenzer.

Führt diesen Scanner über die aktuelle Zeile hinaus und gibt die übersprungene Eingabe zurück. Diese Methode gibt den Rest der aktuellen Zeile zurück, mit Ausnahme aller Zeilentrennzeichen am Ende. Die Position wird auf den Anfang der nächsten Zeile gesetzt. - Scanner#nextLine

+0

also muss ich eine andere next() -Funktion verwenden und dann eine weitere nextLine, um das \ n-Zeichen zu verwerfen? – hzzhyj

+0

Sollte er nur .next() dann verwenden? – JustinKSU

+0

und ja, es funktionierte, Markierung als akzeptiert – hzzhyj