您好,我有这段代码:

Scanner input = new Scanner(new File("src/data/input.csv"));
input.useDelimiter(",|\\n");


System.out.println(input.next());
System.out.println(input.next());
System.out.println(input.next());
System.out.println(input.next());
System.out.println(input.next());
System.out.println(input.next());
System.out.println(input.next());
System.out.println(input.next());
System.out.println(input.next());
System.out.println(input.next());
Input.csv是:

-149.95038,61.13712,“McDonalds-Anchorage,AK”,“3828 W Dimond Blvd,Anchorage,AK,(907)248-0597”
-149.93538,61.18167,“McDonalds-Anchorage,AK”,“4350 Spenard Rd,Anchorage,AK(907)243-5122”

我的预期输出是:

-149.95038
61.13712
“麦当劳安克雷奇
AK”
“3828 W戴蒙德大道
锚地
阿克
(907)248-0597“
-149.93538
61.18167

相反,我得到:

-149.95038
61.13712
“麦当劳安克雷奇
AK”
“3828 W戴蒙德大道
锚地
阿克
(907)248-0597“
(空行)
-149.93538
61.18167

我不确定为什么不跳过新行。是否有更好的方法从输入文件中获取值?

最佳答案

这可能是Carriage Return/Line Feed issue。在Windows(和其他一些系统)上,行定界符是\r\n而不是\n

更换

input.useDelimiter(",|\\n");


input.useDelimiter(",|\\n|\\r|(\\r\\n)");

这将确保选择回车(\r)。

但是,读取文件的最佳方法是使用BufferedReader而不是Scanner(以相同的方式对其进行初始化)。然后,使用readLine()读取行,并使用 line.split(",") 以逗号分隔行。

09-07 18:10