首页 > 解决方案 > 如何在 Kotlin 中的所有数字之间插入空格?

问题描述

我想像这样转换一个字符串

Turn right on A2309

Turn right on A2 3 0 9

使用 kotlin 谓词最简单的方法是什么?

标签: stringkotlin

解决方案


一种方法是使用正则表达式:

val string = "Turn right on A2309"
val result = string.replace(Regex("(\\d)(?=\\d)"), "$1 ")

此正则表达式查找后跟另一个数字的数字,并捕获第 1 组中的第一个数字。然后我们替换为第 1 组,后跟一个空格。

我的意思是一些类似于.filter{}它的功能,它可以让我根据每个字符是否为数字单独转换每个字符。

buildString在这种情况下,我可以想到forEach

val string = "Turn right on A2309"
val result = buildString {
    string.forEach {
        append(it)
        if (it.isDigit()) {
            append(' ')
        }
    }
}

或者flatMap然后joinToString(这将创建一堆不必要的列表):

val result = string.flatMap {
    if (!it.isDigit()) {
        listOf(it)
    } else {
        listOf(it, ' ')
    }
}.joinToString(separator = "")

请注意,与正则表达式解决方案不同,这将在每个数字后添加一个空格。如果您只想在后跟其他数字的数字后添加空格,则需要一次检查 2 个数字(例如,使用类似zipWithNext)。您还需要单独添加最后一个字符,因为这不是一对的开始。IMO,那时太麻烦了,最好使用正则表达式。


推荐阅读