【问题标题】:Kotlin split with regex work not as expectedKotlin 与正则表达式的拆分工作不如预期
【发布时间】:2019-02-03 22:41:08
【问题描述】:
我正在尝试用 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
【问题讨论】:
标签:
java
android
regex
kotlin
【解决方案1】:
data.chunked(16)
应该足以解决您描述的问题。它应该在您使用的版本中可用,因为它记录为 here。
我已经尝试过您的方法和来自Keng 的方法,但结果与此处描述的非常不同。
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 的数组,这是由末尾的空元素引起的。我不太明白为什么,但我希望这有助于解决您的问题。
【解决方案2】:
这是我用正则表达式拆分它的方法
.{16}
注意:我不确定那里的所有其他东西都在尝试做什么,也许是字符串特定的项目?