我有一些大的文本文件,我将进行连续匹配(只是捕获,而不是替换).我认为将整个文件保存在内存中并不是一个好主意,而是使用a Reader.
我对输入的了解是,如果匹配,它不会超过5行.所以我的想法是有一些缓冲区只保留这5行,或者左右,进行第一次搜索,然后继续.但它必须"知道"正则表达式匹配结束的位置才能实现.例如,如果匹配在第2行结束,它应该从这里开始下一次搜索.是否有可能以有效的方式做这样的事情?
aio*_*obe 26
您可以使用a Scanner和findWithinHorizon方法:
Scanner s = new Scanner(new File("thefile"));
String nextMatch = s.findWithinHorizon(yourPattern, 0);
Run Code Online (Sandbox Code Playgroud)
来自api findWithinHorizon:
如果horizon为0,则忽略horizon,此方法继续搜索输入,查找指定的模式而不绑定.在这种情况下,它可以缓冲搜索模式的所有输入.
旁注:在多行匹配时,您可能需要查看常量Pattern.MULTILINE和Pattern.DOTALL.