Sha*_*ila 6 java regex file-io filereader java.util.scanner
我试图理解的java文件中的一行是如下所示.
return new Scanner(file).useDelimiter("\\Z").next();
Run Code Online (Sandbox Code Playgroud)
根据java.util.regex.Pattern文档,该文件应返回"输入的结尾,但对于最终的终结符,如果有的话".但是,它只返回文件中的前1024个字符.这是正则表达式模式匹配器施加的限制吗?这可以克服吗?目前我正在使用文件阅读器.但我想知道这种行为的原因.
我自己,我无法重现这一点.但我想我能说明发生了什么.
在内部,扫描仪使用1024个字符的字符缓冲区.默认情况下,扫描仪将从可读的1024个字符中读取,如果可能,然后应用该模式.
问题在于你的模式...它总是与输入的结尾匹配,但这并不意味着输入流/数据的结束.当Java将模式应用于缓冲数据时,它会尝试查找输入结束的第一个匹配项.由于缓冲区中有1024个字符,因此匹配引擎将位置1024调用分隔符的第一个匹配项,并将其前面的所有内容作为第一个标记返回.
由于这个原因,我认为输入结束锚不适用于扫描仪.毕竟,它可能是从无限的流中读取的.