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

Kotlin中split()如何保留重复字符串?拆分结果丢失重复项

Kotlin中提取重复特殊字符段并保留重复项的解决方法

问题场景

  • 输入字符串:"aa..aa..aa...a."
  • 期望输出:["..","..","..","."]
  • 现有错误代码:
var split_string: Set<String> = charsplit.split(re_di).toSet()
  • 实际输出:["","..","."]

问题原因

  1. toSet()导致去重:Set集合本身的特性就是自动剔除重复元素,所以哪怕split()返回的列表里有重复的特殊字符段,转成Set后都会被去重。
  2. split()产生空字符串:当正则分隔符出现在字符串开头、结尾,或者连续出现时,split会生成空字符串,这就是输出里有空值的原因。

正确实现方案

方案一:正则匹配目标片段(推荐)

直接用正则匹配所有连续的特殊字符段,这比split更贴合需求:

val input = "aa..aa..aa...a."
// 匹配一个或多个连续的.,如果是其他特殊字符,修改正则即可
val specialPattern = Regex("\\.+")
val result = specialPattern.findAll(input)
    .map { it.value } // 提取匹配到的字符串
    .toList()

println(result) // 输出: [.., .., ..., .]

如果需要匹配多种特殊字符(比如., #, !),只需调整正则表达式:

val multiSpecialPattern = Regex("[.,#!]+")
val result = multiSpecialPattern.findAll(input).map { it.value }.toList()

方案二:修正split实现(仅作参考)

如果一定要用split,需要去掉toSet()并过滤空字符串:

val input = "aa..aa..aa...a."
// 用非特殊字符作为分隔符,这里以非.为例
val separatorRegex = Regex("[^.]+")
val result = input.split(separatorRegex)
    .filter { it.isNotEmpty() } // 过滤空字符串
    .toList()

println(result) // 输出: [.., .., ..., .]

内容的提问来源于stack exchange,提问作者Dev Rathod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:25:08