迭代文件,按模式分割
我正试图围绕文件流处理。 得到了这样的输入:
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
,这是一个序列,其中每个元素是在一个单一的块的行列表。