Java Scanner换行符识别

时间:2011-05-07 03:16:01

标签: java newline java.util.scanner

我找不到默认情况下指定扫描程序如何处理换行模式的文档。我想逐行读取文件,让扫描仪能够处理\ r,\ n或\ r \ n行结尾,无论程序实际运行的是什么系统。

如果我宣布这样的扫描仪:

Scanner scanner = new Scanner(reader);

默认行为是什么?它会如上所述处理所有这三种,还是我必须明确告诉它呢?

2 个答案:

答案 0 :(得分:5)

查看Sun JDK 1.6的源代码,使用的模式是“\ r \ n | [\ n \ r \ u \ u2028 \ u2029 \ u0085]”

分别表示“\ r \ n”或\ r,\ n中的任何一个或“行分隔符”,“段落分隔符”和“下一行”的unicode字符。

答案 1 :(得分:3)

没有记录(在Java 1.6中),但JDK代码使用此正则表达式来匹配换行符:

"\r\n|[\n\r\u2028\u2029\u0085]"

以下是源代码的链接:http://cr.openjdk.java.net/~briangoetz/7012540/webrev/src/share/classes/java/util/Scanner.java.html

IMO,这应该被指定,因为Scanner对行分隔符的行为与(例如)BufferedReader不同。 (我已提交错误报告......)