You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中满足条件时复制元素或拆分含连字符单词的实现

Kotlin实现字符串列表的两种处理需求

现有字符串:

val statement = "Ramu is a genius-boy, who likes tea."

按空格分割后得到单词列表:

val originalList = listOf("Ramu", "is", "a", "genius-boy,", "who", "likes", "tea.")

以下是两个需求的实现方案:


需求1:复制含连字符的元素

遍历原列表,对每个元素统计其中连字符的数量,将该元素保留并额外复制对应次数,最后合并为新列表。

代码实现:

val statement = "Ramu is a genius-boy, who likes tea."
val originalList = statement.split(" ")

val listContainingConnectedWordCopies = originalList.flatMap { word ->
    // 统计元素中的连字符数量
    val hyphenCount = word.count { it == '-' }
    // 生成包含原元素+对应次数副本的列表
    List(hyphenCount + 1) { word }
}

// 验证结果
println(listContainingConnectedWordCopies)
// 输出:[Ramu, is, a, genius-boy,, genius-boy,, who, likes, tea.]

需求2:拆分含连字符的元素

遍历原列表,对包含连字符的元素,以第一个连字符为分隔点拆分为两部分(连字符归属第二部分),无连字符的元素直接保留。

若需匹配你给出的示例结果(将原元素末尾的逗号移至前半部分),可添加标点调整逻辑,完整代码如下:

val statement = "Ramu is a genius-boy, who likes tea."
val originalList = statement.split(" ")

val listOfDisconnectedWords = originalList.flatMap { word ->
    val hyphenIndex = word.indexOf('-')
    if (hyphenIndex != -1) {
        // 拆分基础部分
        val part1 = word.substring(0, hyphenIndex)
        val part2 = word.substring(hyphenIndex)
        // 提取末尾标点并调整到前半部分
        val punctuation = word.takeLastWhile { !it.isLetterOrDigit() }
        val adjustedPart1 = part1 + punctuation
        val adjustedPart2 = part2.removeSuffix(punctuation)
        listOf(adjustedPart1, adjustedPart2)
    } else {
        listOf(word)
    }
}

// 验证结果
println(listOfDisconnectedWords)
// 输出:[Ramu, is, a, genius,, -boy, who, likes, tea.]

如果不需要调整标点,直接使用listOf(part1, part2)即可得到[Ramu, is, a, genius, -boy,, who, likes, tea.]。


内容的提问来源于stack exchange,提问作者Swaminath Bera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:55:30