【问题标题】:How to split string into parts with N letters in each using Kotlin?如何使用 Kotlin 将字符串拆分为每个包含 N 个字母的部分?
【发布时间】:2021-11-09 12:09:29
【问题描述】:

我需要将一个字符串分成几个部分,每个部分包含 N 个字母。 例如

str = "Hello World! Kotlin is amazing!"
split_into_n(str, 3) = ["Hel", "lo ", "Wor", "ld!", " Ko", "tli", "n i", "s a", "maz", "ing", "!"]

我试过regex,但它似乎不起作用。 我尝试过使用拆分方法,但它也不起作用。 任何帮助将不胜感激:)

【问题讨论】:

  • 你能用正则表达式展示你的尝试吗?
  • 是的,当然。 fun main(args : Array<String>) { val my_string = "Hello World! Kotlin is amazing!" print("/.{1,3}/g".toRegex().matchEntire(names)?.groups?.get(1)?.value) }

标签: arrays string kotlin split


【解决方案1】:

chunked() 扩展函数正是这样做的:

val str = "Hello World! Kotlin is amazing!"
println(str.chunked(3))
// [Hel, lo , Wor, ld!,  Ko, tli, n i, s a, maz, ing, !]

【讨论】:

    【解决方案2】:

    结果数组的长度将是原始数组的长度除以 N,但如果有余数,则需要一个额外的元素。

    val result=Array<String>(str.length/n+(str.length%n).sign())
    

    如果原始 lebgth 不能被n 整除,则str.length/n 是没有最后一个元素的结果长度。

    如果长度可被n 整除,str.length%n 的结果为 0,否则为正数(余数)。

    sign 如果值为正,则返回1,如果值为0,则返回0

    之后,您可以用子字符串填充数组:

    for(i in 0..result.length){
        result[i]=str.substring(i*n,min((i+1)*n,str.length))
    }
    

    这会遍历结果数组的所有索引,并将相应的元素设置为str 的子字符串。

    起始索引是结果数组的索引乘以 3,结束索引是下一个元素之前的索引(或最后一个总长度)。

    结合起来,它看起来像这样:

    import kotlin.math
    fun splitIntoN(str,n){
        val result=Array<String>(str.length/n+(str.length%n).sign())
        for(i in 0..result.length){
            result[i]=str.substring(i*n,min((i+1)*n,str.length))
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      相关资源
      最近更新 更多