迭代文件,按模式分割

我正试图围绕文件流处理。 得到了这样的输入:

bla blubb blubber testcode 

有几个文件都看起来像上面。 现在,我正在使用单个文件方法将整个文件读入内存并将其拆分:

 Files.newBufferedReader("myfile").use { f -> f.readText().splitToSequence("\n\n").forEach { // do my stuff } } 

现在,我试图将这个概括为更大的输入(使文件在内存中不可行)和几个文件。 理想情况下,我会把输入文件的整个目录当作我在\n\n上分割的一行代码行来处理这些部分。 我将如何做到这一点?

您可以将文件读取为文本行序列,然后将以空行作为分隔符的行重新组合:

 File("myfile").useLines { lines -> val lineBlocks: Sequence<List<String>> = buildSequence { val block = mutableListOf<String>() for (line in lines) { when { line.isNotEmpty() -> block.add(line) block.isNotEmpty() -> { yield(block.toList()) block.clear() } } } if (block.isNotEmpty()) yield(block.toList()) } lineBlocks.forEach { println(it.joinToString()) } } 

在这里你得到的结果在lineBlocks ,这是一个序列,其中每个元素是在一个单一的块的行列表。