Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用—;JAVA_Java_String_Csv_Java.util.scanner_Inputmismatchexception - Fatal编程技术网

当使用—;JAVA

当使用—;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<>

我尝试使用扫描仪读取CSV文件,但当我尝试读取最后一个双精度文件时,如果CSV文件中有多行,则会出现输入不匹配异常。我认为这是因为它正在读取\n作为double的一部分。我如何让它忽略换行符

CSV文件

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