我找不到默认情况下指定扫描程序如何处理换行模式的文档。我想逐行读取文件,让扫描仪能够处理\ r,\ n或\ r \ n行结尾,无论程序实际运行的是什么系统。
如果我宣布这样的扫描仪:
Scanner scanner = new Scanner(reader);
默认行为是什么?它会如上所述处理所有这三种,还是我必须明确告诉它呢?
答案 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
不同。 (我已提交错误报告......)