我正在尝试将字符串拆分为 16 个字符长度的块。
所以首先我创建长度为 64 的字符串
val data = "Some string"
data = String.format("%-64s", data)
然后我用正则表达式分割它
val nameArray = data.split(Regex("(?<=\\G.{16})").toPattern())
这里我期望得到 4 个包含 16 个字符的块,但我只得到 2 个,其中第一个是 16,第二个是 48。
我这里哪里错了?
Kotlin 1.2.61、Oracle JDK 1.8.0_181-b13、Windows 10
data.chunked(16)
应该足以解决您所描述的问题。它应该在您使用的版本中可用,因为它是这样记录的here https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/chunked.html.
我已经尝试过你的方法和来自Keng https://stackoverflow.com/a/53747116/4687402,但结果却截然不同,如此处所述。
https://pl.kotl.in/HJpQSfdqi https://pl.kotl.in/HJpQSfdqi
import java.net.URI
import java.util.*
import java.time.LocalDateTime
import java.time.temporal.*
/**
* You can edit, run, and share this code.
* play.kotlinlang.org
*/
fun main() {
var data = "Some string"
data = String.format("%-64s", data)
println(data.length)
// 1st approach
var nameArray = data.split(Regex("(?<=\\G.{16})").toPattern())
println(nameArray)
nameArray.forEach{ it -> println(it.length) }
println()
// 2nd approach
nameArray = data.split(Regex(".{16}").toPattern())
println(nameArray)
nameArray.forEach{ it -> println(it.length) }
println()
data.chunked(16).forEach{ it -> println(it.length) }
}
当我运行该代码时,建议的正则表达式方法返回长度为 5 的数组,这是由末尾的空元素引起的。我不太明白为什么,但我希望这有助于解决您的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)