从输入文件读取时出现新行,即使 \n 已被分隔。

3

你好,我有这段代码:

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,"麦当劳-安克雷奇,AK","3828 W Dimond Blvd,Anchorage,AK,(907) 248-0597"

-149.93538,61.18167,"麦当劳-安克雷奇,AK","4350 Spenard Rd,Anchorage,AK (907) 243-5122"

我期望的输出结果是:

-149.95038

61.13712

"麦当劳-安克雷奇

AK"

"3828 W Dimond Blvd

Anchorage

AK

(907) 248-0597"

-149.93538

61.18167

但我得到的结果是:

-149.95038

61.13712

"麦当劳-安克雷奇

AK"

"3828 W Dimond Blvd

Anchorage

AK

(907) 248-0597"

(空行)

-149.93538

61.18167

我不确定为什么换行符没有被跳过。有没有更好的方法从输入文件中获取值?

2个回答

4
这可能是一个 回车换行问题。在Windows(和其他一些系统)中,行分隔符是\r\n而不是\n
请替换。
input.useDelimiter(",|\\n");

使用

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

这将确保捕获回车符 (\r)。然而,最好的读取文件方式是使用 BufferedReader 而不是 Scanner(初始化方式相同)。然后,使用 readLine() 读取行,并使用 line.split(",") 在逗号处拆分行。

不幸的是,这并没有给我带来好运。我得到了相同的结果。 - 73est
我的终极目标是获取前两个标记(即前两个数字),将它们存储为坐标,并将每行的最后4个标记作为一个地址。有没有更好的方法来扫描输入文件?使用\r作为分隔符似乎不起作用。奇怪的是,我设置了一个while循环(实际输入文件有数千行),并不是每一行都有那个神秘的换行符号在结尾。 - 73est
@Martin 让你的程序打印出神秘换行符的ASCII值。 - k_g
1
@Martin,请查看我的最新编辑,以获得更好的文件读取方式。 - k_g

0

尝试使用系统行分隔符

input.useDelimiter(System.getProperty("line.separator"));

这样做不起作用,因为 OP 正试图使用正则表达式。您必须手动转义行分隔符。此外,无法保证 OP 读取的 csv 是在他的操作系统上编写的。最安全的方法是单独处理 \r\n - k_g
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - 73est

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接