Java Scanner换行符识别
我找不到默认情况下指定扫描程序如何处理换行模式的文档。 我想逐行读取文件,让扫描仪能够处理\ r,\ n或\ r \ n行结尾,无论程序实际运行的系统如何。
如果我宣布这样的扫描仪:
Scanner scanner = new Scanner(reader);
什么是默认行为? 它会如上所述处理所有这三种,还是我必须明确告诉它呢?
查看Sun JDK 1.6的源代码,使用的模式是“\ r \ n | [\ n \ r \ u \ u2028 \ u2029 \ u0085]”
它分别表示“\ r \ n”或\ r,\ n中的任何一个或“行分隔符”,“段分隔符”和“下一行”的unicode字符。
它没有记录(在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
不同。 (我已提交错误报告……)