【问题标题】: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}
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多