【问题标题】:Reading a text file with a Scanner in Java - Token's return character使用 Java 中的 Scanner 读取文本文件 - 令牌的返回字符
【发布时间】:2012-11-30 16:42:59
【问题描述】:

我正在尝试在一个简单的 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”字符。

【问题讨论】:

  • 嗨!我该怎么做?我看到我的费率为 0%,但我不知道如何更改它。
  • 只需单击您的问题答案旁边的复选标记之一

标签: java file-io io text-files


【解决方案1】:

在某些文件系统(特别是 Windows)中,\r\n 使用 换行符。您正在使用 \n 仅作为分隔符,因此 \r 留在外面。在分隔符中也添加\r

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

【讨论】:

  • 我使用了模式 "\\;|\\r\\n" 并且效果很好!谢谢你的解释。
  • @RafaelBorja 很高兴知道。请接受你喜欢的答案。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 2013-07-08
      • 2017-01-18
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多