Java扫描器换行识别

Java扫描器换行识别,java,newline,java.util.scanner,Java,Newline,Java.util.scanner,我找不到指定扫描器默认如何处理换行模式的文档。我希望逐行读取文件,并使扫描仪能够处理\r\n或\r\n行结尾,而不考虑程序实际运行的系统 如果我这样声明扫描仪: Scanner scanner = new Scanner(reader); 默认行为是什么?它会像上面描述的那样处理所有三种类型吗?还是我必须明确地告诉它这样做?它没有文档记录(在Java 1.6中),但是JDK代码使用这个正则表达式来匹配换行符: "\r\n|[\n\r\u2028\u2029\u0085]" 以下是源代码的链接

我找不到指定扫描器默认如何处理换行模式的文档。我希望逐行读取文件,并使扫描仪能够处理\r\n或\r\n行结尾,而不考虑程序实际运行的系统

如果我这样声明扫描仪:

Scanner scanner = new Scanner(reader);
默认行为是什么?它会像上面描述的那样处理所有三种类型吗?还是我必须明确地告诉它这样做?

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

"\r\n|[\n\r\u2028\u2029\u0085]"
以下是源代码的链接:


在我看来,这应该被指定,因为
扫描器
对行分隔符的行为不同于(例如)
缓冲读取器
。(我提交了一份错误报告…

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


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

试试看会发生什么。创建3个不同的文件,每个文件使用不同的EOL字符串。实际上,在这种情况下,“试试看”并不能给出完整的答案@Setphen C中,该问题询问它是处理“\r”、“\n”还是“\r\n”。这很容易测试和验证。是的,完整的答案是它还支持unicodes字符,但这不是问题所在。正确的问题应该是“通过测试扫描仪,我发现它支持\r\n\r\n,它还支持其他功能吗?”。这张海报采取了懒惰的方式,如果人们不断地给出容易测试的答案,它将永远不会学习简单的问题解决技巧。@Duracell,“一点测试表明这是正确的。”,这是你在发布问题之前应该做的@卡姆里克:据我所知,卡米克尔,你对这次讨论没有帮助。Duracell提出的问题和David/Stephen C给出的答案都是有效的。只是尝试它并不是解决方案,特别是因为Scanner没有明确定义行分隔符是什么,所以Java运行时的实现可能会有所不同。谢谢,这正是我需要知道的。一些测试表明这是正确的。如果我不指定分隔符并使用scanner.hasNext,那么它会将
\r
\n
\r\n
视为行尾。这不会碰巧是Stephen Crawley,对吗?呸。我目前正在与一位名叫Stephen C的讲师一起学习Java软件设计课程。这让我激动了一秒钟。你能指出错误报告吗?我在Oracle错误数据库中找不到它。我认为它肯定应该在API中,因为它没有使用平台行分隔符。