Kotlin:将由括号分隔的对列表解析为 Pairs() 列表

Kotlin: parsing a list of pairs delimited by parentheses into a list of Pairs()

还没想好怎么用Kotlin的split函数把这一系列的边解析成PairsList

(2, 4), (3, 6), (5, 1), (8, 9), (10, 12), (11, 7)

我可以毫无问题地逐个字符地编写一个字符解析器 - 但是否有针对此解析问题的 Kotlin 解决方案?

s.substring(1, s.length-1)
    .split("), (")
    .map { it.split(", ") }
    .map { it[0] to it[1] }

Aleksei 的回答应该没问题,虽然它没有给你数字。

此外,我宁愿这样写(分解成函数):

private fun String.parsePairs(): List<Pair<Int, Int>> = removePrefix("(")
    .removeSuffix(")")
    .split("), (")
    .map { it.parsePair() }

private fun String.parsePair(): Pair<Int, Int> =
    split(", ").let { it[0].toInt() to it[1].toInt() }

另一种选择是使用正则表达式。这里有点矫枉过正,但如果您有更复杂的要求,则更通用:

val regex = Regex("""\((\d+),\s*(\d+)\)""")

private fun String.parsePairs(): List<Pair<Int, Int>> = regex.findAll(this)
        .map { it.groupValues[1].toInt() to it.groupValues[2].toInt() }
        .toList()