java - Java中用Scanner读取文本文件——Token的返回字符

标签 java file-io io text-files

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

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' 字符。

最佳答案

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

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

关于java - Java中用Scanner读取文本文件——Token的返回字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649392/

相关文章:

java - 让 GPG 解密在 Java 中工作(Bouncy CaSTLe)

java - 密码加密速度明显慢

python - 如何获取多个动态文本文件的内容并将其存储在一个文本文件和mysql中 - Python 2.7?

Python:正则表达式使用re.search

java - 为什么 FileInputStream read() 方法错误地读取问号(ascii : 63) when put into infinite loop?

python - 遍历类文件和调用 readline 之间的区别

java - Spring Boot Rest 调用大量记录时出现 504 网关超时问题(超过 80K)

java - 如何使用 Content Provider 将文件放入 firebase (内容 ://) as source?

c++ - istream::seekg 和 ios_base::end 可靠吗?

.net - 防止 IO.GetDirectories() 遵循符号链接(symbolic link)