2016-10-21 12 views
0
私は私のコードでこのエラーが午前

:「メイン」スレッドで 例外java.util.InputMismatchException
私は、エラーの理由を知っているが、全体のラインがありますStringに変換されていますが、どのように修正するのかは分かりません。私はデリミタを読むことを試みました**Exception in thread "main" java.util.InputMismatchException**How do I use a delimiter in Java Scanner?
しかし、それはすべて私の理解のレベルのために複雑すぎるように思えます。
マイコード:は、テキストファイルから値を読み取り、文字列に分離して、二重

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

他のコード

//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")); 

区切り

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

より多くのコード

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

    } 
    stock.close(); 

を使用しての私の失敗の試みこのファイルを読み取ろうとしています:

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 

ファイルから空白を変更したり、削除したりしてはいけません。 どのように値を抽出する必要があるかについての助けやアドバイスについて、私は最も感謝します。私は要求に応じてより多くのコードを提供できることを嬉しく思っていますが、これがすべて必要であると私は期待しています。 もう一度おねがいします。私は何か助けていただきありがとうございます。

答えて

3

ファイルの外見から、区切り記号はタブとスペースの組み合わせ(項目名と番号の間の区切り文字)、またはの各行の最後にある改行文字です。

この場合、区切り文字は1つ以上の空白文字を意味する\\s+である必要があります。だからあなたのコードは次のようになります。

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(); 

私はIntelliJの上で上記何であるかのようなコードを使用して入力ファイルをテストし、それが働いているように見えます。

+0

感謝を参照してください。デリメータをよりよく理解するためにAPIがどのように機能しているかを調べるために、APIで調べてみましょう。再度、感謝します。 –

+0

オーバーフローが発生するまで30秒待つ必要があります –

0

usedelimite()メソッドは、Scannerオブジェクトの区切り文字を設定します。基本的には、Scannerオブジェクトが文字列をトークン化するために使用します。これは基本的にファイルの処理に使用されます。スキャナuseDelimiter()方法の詳細については は、下のリンクティムあなたの区切り文字はあまりにも私のコードで働い

Scanner in Java

関連する問題