来自String正文的单独标题,或如何用2“ \ n”进行解析? Kotlin

问题描述 投票:1回答:2

我有一个文本,应该保存在android string.xml资源中。为此,我想将其保存在Data类列表中。

标题1

Body1 .....

标题2

Body2 ......

标题周围有2个换行符,我需要从正文中拆分标题。这个怎么做?是否有任何正则表达式模式?

arrays regex kotlin
2个回答
1
投票

您可以在kotlin本身中解析它,它将通过使用行序列以类似于regex的O(n)步骤进行解析。

示例:

fun parseTitle(str: String): Sequence<String> = sequence {
    var emptyLines = 2
    str.lineSequence().forEach {
        when {
            emptyLines > 1 -> {
                yield(it)
                emptyLines = 0
            }
            it.isNotEmpty() -> emptyLines = 0
            else -> emptyLines++
        }
    }
}

val test =
    """
    Title1

    Body1 .....


    Title2

    Body2......
    """.trimIndent()

println(parseTitle(test).toList()) // [Title1, Title2]

0
投票

您可以.split("\n\n")您的字符串以获取字符串列表,然后使用.chunked(2) { ... }将结果列表分组为字符串对,将每对映射到您的数据类实例。

示例:

data class Item(val title: String, val body: String)

fun parseItems(input: String): List<Item> =
    input.splitToSequence("\n\n")
        .chunked(2) { (title, body) -> Item(title, body) }
        .toList()

fun main(args: Array<String>) {
    val testData = """
        Title1

        Body1 .....

        Title2

        Body2......
    """.trimIndent()
    println(parseItems(testData))
}

它输出以下内容:

[Item(title=Title1, body=Body1 .....), Item(title=Title2, body=Body2......)]

您可以在这里使用它:https://pl.kotl.in/8ix38By7m

© www.soinside.com 2019 - 2024. All rights reserved.