我正在试图在一个简单的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'所在的位置。)
所以,
使用code.substring(0, 2)
之类的解决方法非常简单,但我想了解为什么那里有'\ r'字符。
答案 0 :(得分:1)
您正在使用Windows文件,该文件使用\r\n
作为行分隔符(即回车符换行符)。 Unix仅使用\n
(换行)。
要解决此问题,请将\r
添加到扫描仪分隔符。
答案 1 :(得分:1)
在某些文件系统(特别是Windows)中,\r\n
使用新行字符。您只使用\n
分隔符,因此\r
仍然存在。在您的分隔符中添加\r
。
要使代码更加健壮,请使用System.lineSeparator()
获取换行符并相应地使用分隔符。
答案 2 :(得分:0)
已经给出了它发生的原因,其他避免这种情况的方法是使用scanner.nextLine()
然后拆分;