string - 如何在 Kotlin 中的所有数字之间插入空格?
问题描述
我想像这样转换一个字符串
Turn right on A2309
至
Turn right on A2 3 0 9
使用 kotlin 谓词最简单的方法是什么?
解决方案
一种方法是使用正则表达式:
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,那时太麻烦了,最好使用正则表达式。
推荐阅读
- bash - 从 Bash Shell 脚本中最新的目录中检查文件
- reactjs - 警告:组件正在将受控输入更改为不受控。这可能是由于值从已定义更改为未定义引起的
- r - 在 R - 对角 AB 线上绘图
- java - 如何在 Android 上下载 mp3 文件?
- java - 在没有服务的情况下杀死应用程序后如何在后台线程中运行代码?
- debugging - 如何强制 Rider 使用 Chrome 进行调试?
- sql - 优化加入GreenPlum
- bash - 如何使用 awk/bash 脚本减去两列的值并添加到文本文件中的新列
- javascript - 为端点应用 JWT Guard,但当它有请求参数时不应用它
- javascript - React useState:切换对象内部的布尔属性-如何识别onClick源?