Kotlin 与正则表达式的拆分工作不符合预期

2024-01-09

我正在尝试将字符串拆分为 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(使用前将#替换为@)

Kotlin 与正则表达式的拆分工作不符合预期 的相关文章

随机推荐