当使用—;JAVA
我尝试使用扫描仪读取CSV文件,但当我尝试读取最后一个双精度文件时,如果CSV文件中有多行,则会出现输入不匹配异常。我认为这是因为它正在读取\n作为double的一部分。我如何让它忽略换行符 CSV文件当使用—;JAVA,java,string,csv,java.util.scanner,inputmismatchexception,Java,String,Csv,Java.util.scanner,Inputmismatchexception,我尝试使用扫描仪读取CSV文件,但当我尝试读取最后一个双精度文件时,如果CSV文件中有多行,则会出现输入不匹配异常。我认为这是因为它正在读取\n作为double的一部分。我如何让它忽略换行符 CSV文件 P1,25,30 P2,10,10 Java public static ArrayList<MarkEntry> readCSV(File file) { ArrayList<MarkEntry> entries = new ArrayList<>
P1,25,30
P2,10,10
Java
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;
}
publicstaticarraylistreadcsv(文件){
ArrayList条目=新的ArrayList();
尝试
{
Scanner in=new Scanner(file).useDelimiter(“,”);
while(在.hasNext()中)
{
字符串title=in.next();
双标记=in.nextDouble();
double out of=in.nextDouble();//程序在此崩溃
条目。添加(新标记条目(标题、标记、超出));
}
}catch(filenotfounde异常)
{
System.out.println(“文件:“+File+”未找到”);
}
返回条目;
}
您可以使用多个测厚仪:
Scanner in = new Scanner(input).useDelimiter(",|\\r\\n");
注意:在Linux上,行尾只是\n
,因此您可以使用以下代码:
Scanner in = new Scanner(input).useDelimiter(",|\\n");
该错误是由于扫描仪试图读取下一个分隔符(
,
)或字符串结尾。最后一个标记将包含换行符,将该值转换为双精度值将导致出现错误
在使用扫描仪进行分析之前,请关闭换行符:
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());