Kotlin与正则表达式工作不合预期

时间:2018-08-29 07:59:57

标签: java android regex kotlin

我试图用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

enter image description here

2 个答案:

答案 0 :(得分:0)

这是我用正则表达式分割的方式

.{16}

注意:我不确定其中所有其他内容都在尝试做什么,也许是字符串特定的项目?

答案 1 :(得分:0)

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) }
}

运行该代码时,建议的regex方法返回长度为5的数组,这是由结尾处的空元素引起的。我不太清楚为什么,但是我希望这有助于解决您的问题。