使用\ n-Java从字符串读取double时使用Scanner的InputMismatchException

时间:2016-10-21 01:13:29

标签: java string csv java.util.scanner inputmismatchexception

我正在尝试使用扫描程序从CSV文件中读取,但是当我尝试读取最后一个双数并且我的CSV文件中有多行时,我收到了一个InputMismatchException。我认为这是因为它正在读取\ n作为双重的一部分。如何让它忽略换行符?

CSV文件

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;
}

2 个答案:

答案 0 :(得分:1)

您可以使用多个分隔符:

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

注意:在Linux上,行结尾只是\n,因此您将使用此代码:

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

答案 1 :(得分: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());