2016-10-21 4 views
0

ich mit meinem Code diesen Fehler habe: Exception in thread „main“ java.util.InputMismatchException
Ich kenne den Grund für den Fehler, die gesamte Linie ist in eine Zeichenfolge umgewandelt werden, aber ich bin mir nicht sicher, wie Sie es beheben können. Ich habe versucht, auf Delimiters **Exception in thread "main" java.util.InputMismatchException**How do I use a delimiter in Java Scanner?
lesen, aber es klingt alles zu komplex für mein Verständnis.
Mein Code:Werte aus einer Textdatei lesen und Trennen in Streich- und Doppel

import java.util.*; 
import java.io.*; 
public class POSmain{ 
    public static void main(String[] args)throws Exception { 

anderen Code

//create 3 collections to store input, with scanners to extract input 
    Map<String, Double> products = new TreeMap<String, Double>(); 
    Scanner stock = new Scanner(new File("prices.txt")); 

meine gescheiterten Versuch einer Delimiter

//Delimiter to remove whitespace 
    stock.useDelimiter("\\s*[a-z]\\s"); 

mehr Code

//populate each collection with while loops 
while(stock.hasNext()){ 
     tempString = stock.nextLine(); 
     tempdouble = stock.nextDouble(); 
     products.put(tempString,tempdouble); 

    } 
    stock.close(); 

bei Verwendung Versucht, diese Datei zu lesen:

TV   999.99 
Table   199 
Bed   499.99 
Chair   45.49 
Milk 3.00 
Butter 2.84 
Tomato 0.76 
Onion 0.54 
Lettuce 1.00 
Ham 2.50 
Bread 1.75 

Ich bin nicht zu ändern oder löschen Leerzeichen aus der Datei. Ich wäre sehr dankbar für jede Hilfe oder Rat, wie ich die Werte extrahieren sollte. Ich bin glücklich, mehr Code auf Anfrage zur Verfügung zu stellen, aber ich erwarte, dass dies alles ist, was erforderlich ist. Nochmals vielen Dank und ich schätze jede Hilfe, die ich bekomme.

Antwort

3

Aus dem Aussehen Ihrer Datei besteht Ihr Delimeter entweder aus einer Kombination von Tabulatoren und Leerzeichen (die Trennzeichen zwischen dem Artikelnamen und der Nummer), oder der Zeilenumbruch am Ende jeder Zeile.

In diesem Fall sollte Ihr Delimeter \\s+ sein, was ein oder mehrere Leerzeichen bedeutet. So sollte der Code wie folgt aussehen:

Map<String, Double> products = new TreeMap<String, Double>(); 
Scanner stock = new Scanner(new File("prices.txt")); 
stock.useDelimiter("\\s+"); 

while (stock.hasNext()) { 
    tempString = stock.nextLine(); 
    tempdouble = stock.nextDouble(); 
    products.put(tempString,tempdouble); 
} 
stock.close(); 

ich Ihre Eingabedatei mit Code ähnlich getestet, was oben ist auf IntelliJ, und es scheint zu funktionieren.

+0

Dank Tim Ihr Begrenzer arbeitete auch mit meinem Code. Ich werde es in der API untersuchen, um zu sehen, wie es zum besseren Verständnis von Delimetern funktioniert. Danke noch einmal. –

+0

Muss 30 Sekunden warten, bis der Überlauf es mir erlaubt –

0

Die Methode usedelimite() legt das Trennzeichen des Scanner-Objekts fest. Es wird vom Scanner-Objekt verwendet, um Zeichenketten zu token. Es wird hauptsächlich für die Verarbeitung der Dateien verwendet. für weitere Details über Scanner useDelimiter() Methode untenstehenden Link finden Sie,

Scanner in Java

Verwandte Themen