我正在尝试使用扫描程序从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;
}
答案 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());