fun splitKeepDelims(s: String, delimiters: String): List<String> {
// Build regex: e.g. ",;|" → "([,;|])"
val pattern = Regex("([${Regex.escape(delimiters)}])")
val result = mutableListOf<String>()
var lastEnd = 0
for (m in pattern.findAll(s)) {
val start = m.range.first
val end = m.range.last + 1
// Add text before delimiter
if (start > lastEnd) {
result.add(s.substring(lastEnd, start))
}
// Add the delimiter itself
result.add(s.substring(start, end))
lastEnd = end
}
// Add remaining text after last delimiter
if (lastEnd < s.length) {
result.add(s.substring(lastEnd))
}
return result
}
fun main() {
val input = "aa,bbb;cccc|ddddd"
val parts = splitKeepDelims(input, ",;|")
for (p in parts) {
print("[$p] ")
}
}
/*
run:
[aa] [,] [bbb] [;] [cccc] [|] [ddddd]
*/