2016-10-21 4 views
1

スキャナを使用してCSVファイルを読み込もうとしていますが、最後のdoubleを読み込んで複数の行があるときにInputMismatchExceptionが発生します。私のCSVファイルに私はこれがダブルの一部として読書しているからだと思う。改行を無視するにはどうすればよいですか? n-Javaの文字列からdoubleを読み取るときにInputMismatchExceptionが発生する

CSVは、Java

P1,25,30 
P2,10,10 

を提出

public static ArrayList<MarkEntry> readCSV(File file) { 
    ArrayList<MarkEntry> entries = new ArrayList<>(); 
    try 
    { 
     Scanner in = new Scanner(file).useDelimiter(","); 
     while (in.hasNext()) 
     { 
      String title = in.next(); 
      double mark = in.nextDouble(); 
      double outOf = in.nextDouble(); //Program Crashes here 
      entries.add(new MarkEntry(title, mark, outOf)); 
     } 
    } catch (FileNotFoundException e) 
    { 
     System.out.println("File: " + file + " not found"); 
    } 

    return entries; 
} 

答えて

1

あなたは、複数の区切り文字を使用することができます

Scanner in = new Scanner(input).useDelimiter(",|\\r\\n"); 

注:Linuxでは、行末がちょうどですエラーはスキャナが次の区切り文字(,)または文字列の末尾にまで読み取ろうとすることに起因する

Scanner in = new Scanner(input).useDelimiter(",|\\n"); 
0

:は、あなたがこのコードを使用します。最後のトークンに改行が含まれ、その値をdoubleに変換すると、表示されるエラーが発生します。お使いのスキャナーで解析する前に、

Trim改行オフ:

String input = "foo,bar,2.5\n"; 
Scanner in = new Scanner(input.trim()).useDelimiter(","); 
System.out.println(in.next()); 
System.out.println(in.next()); 
System.out.println(in.nextDouble()); 
関連する問題