2016-04-30 18 views
5

文字列とDoubleをtxtファイルから読み込もうとしています。ここで は私のtxtファイルです:ファイルから文字列とDoubleを読み取る必要があります

Mike 300.50 
John 260 
Lisa 425.33 

そして、ここでは、私はそれらを読むために使用していたコードです:

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

を、私はこのコードを実行するたびに、Exception in thread "main" java.util.InputMismatchExceptionは、問題がnextDouble()である私に言って表示されます。

これを解決する方法は誰か分かりますか?

+0

'nextDouble()'は改行を残して、2回目の 'next()'呼び出しで改行を消費し、次の名前をダブルとして解析します。一度に1行ずつ読むことをお勧めします。 –

+0

これを行うと、私は両方の属性を異なる属性に保存することができなくなります。または私はできますか? – Tom

答えて

0

あなたはこの方法を試すことができます:

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

申し訳ありませんが、その行は何をしていますか?ありがとう。 – Tom

+0

私はこれらの行が何であるか知りたかったのです。 name = values [0]; salary = Double.valueOf(values [1]); – Tom

+0

'' reader.nextLine()。split( "\\ s +"); ''スペースで一度に1行ずつ分割し、文字列配列に格納します。だから私は '' values [0] '配列の最初の要素と' 'Double.valueOf(values [1])' 'で2番目の要素をパースすることによってString名を得ています – mmuzahid

-1

あなたは文字列とダブルを読むためにjava.io.StreamTokenizerのを使用することができます。 StreamTokenizerはファイルを適切なデータ型のトークンに分割します。 を使用して、いくつかの定数を使用してトークンの種類を識別できます。 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

なぜこれが下落したのですか? – Basilevs

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

よう はこれを試してみてください。何が起きているのかというと、スキャナはすべての倍精度の後に空行を読み込んでいるので、名前は空行になり、Johnは給料として読み込み、その例外を与えます。 私がしたことは、小さなコード行を追加しました:reader.nextLine();その空の行をスキップできるように。お役に立てれば。

関連する問題