import scala.util.matching.Regex
object SplitKeepDelims {
def splitKeepDelims(s: String, delimiters: String): List[String] = {
// Build regex: e.g. ",;|" → "([,;|])"
val pattern = new Regex("([" + Regex.quote(delimiters) + "])")
var result = List.empty[String]
var lastEnd = 0
for (m <- pattern.findAllMatchIn(s)) {
val start = m.start
val end = m.end
// Add text before delimiter
if (start > lastEnd)
result = result :+ s.substring(lastEnd, start)
// Add the delimiter itself
result = result :+ m.matched
lastEnd = end
}
// Add remaining text after last delimiter
if (lastEnd < s.length)
result = result :+ s.substring(lastEnd)
result
}
def main(args: Array[String]): Unit = {
val input = "aa,bbb;cccc|ddddd"
val parts = splitKeepDelims(input, ",;|")
parts.foreach(p => print(s"[$p] "))
}
}
/*
run:
[aa] [,] [bbb] [;] [cccc] [|] [ddddd]
*/