0

我正在尝试在一个简单的 Java 程序中使用java.util.Scanner读取下面的文本文件。

0001;GUAJARA-MIRIM;RO
0002;ALTO ALEGRE DOS PARECIS;RO
0003;PORTO VELHO;RO

我使用下面的代码阅读了文本文件:

scanner = new Scanner(filerader).useDelimiter("\\;|\\n");
while (scanner.hasNext()) {
    int id= scanner.nextInt();
    String name = scanner.next();
    String code = scanner.next();

    System.out.printf(".%s.%s.%d.\n", name, code, id);
}

结果是:

.GUAJARA-MIRIM.RO.1
.
.ALTO ALEGRE DOS PARECIS.RO.2
.
.PORTO VELHO.RO.3
.

但是每行的第三个标记的结果在末尾有一个不方便的 '\r' 字符(ANSI 代码 13)。我不知道为什么(我在格式化字符串上使用了 '.' 字符来明确 '\r' 的位置)。

所以,

  1. 为什么在第三个标记的末尾有一个 '\r' ?
  2. 如何绕过它。

使用类似的解决方法非常简单code.substring(0, 2),但我想了解为什么那里有一个 '\r' 字符。

4

3 回答 3

1

您正在使用 Windows 文件,该文件\r\n用作行分隔符(又名回车换行)。Unix 仅使用\n(换行)。

要解决此问题,请添加\r到您的扫描仪分隔符。

于 2012-11-30T16:45:05.187 回答
1

在某些文件系统(特别是 Windows)中,\r\n使用换行符。您\n仅使用分隔符,因此\r请不要使用。还要添加\r分隔符。

为了使您的代码更加健壮,请使用System.lineSeparator()获取换行符并相应地使用分隔符。

于 2012-11-30T16:45:59.307 回答
0

已经给出了发生这种情况的原因,避免这种情况的其他方法是使用scanner.nextLine()然后拆分;.

于 2012-11-30T16:54:00.323 回答