使用Java中的扫描仪读取文本文件 - 令牌的返回字符

时间:2012-11-30 16:42:59

标签: java file-io io text-files

我正在试图在一个简单的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''caracther(ANSI代码13)。我不知道为什么(我在格式化字符串上使用'。'字符来清楚'\ r'所在的位置。)

所以,

  1. 为什么在第三个令牌的末尾有一个'\ r'?
  2. 如何绕过它。
  3. 使用code.substring(0, 2)之类的解决方法非常简单,但我想了解为什么那里有'\ r'字符。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

在某些文件系统(特别是Windows)中,\r\n使用新行字符。您只使用\n分隔符,因此\r仍然存在。在您的分隔符中添加\r

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

答案 2 :(得分:0)

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