How to split strings into characters in Scala
For example, there is a string val s = "Test"
. How do you separate it into t, e, s, t
?
Do you need characters?
"Test".toList // Makes a list of characters
"Test".toArray // Makes an array of characters
Do you need bytes?
"Test".getBytes // Java provides this
Do you need strings?
"Test".map(_.toString) // Vector of strings
"Test".sliding(1).toList // List of strings
"Test".sliding(1).toArray // Array of strings
Do you need UTF-32 code points? Okay, that's a tougher one.
def UTF32point(s: String, idx: Int = 0, found: List[Int] = Nil): List[Int] = {
if (idx >= s.length) found.reverse
else {
val point = s.codePointAt(idx)
UTF32point(s, idx + java.lang.Character.charCount(point), point :: found)
}
}
UTF32point("Test")
You can use toList
as follows:
scala> s.toList
res1: List[Char] = List(T, e, s, t)
If you want an array, you can use toArray
scala> s.toArray
res2: Array[Char] = Array(T, e, s, t)
Actually you don't need to do anything special. There is already implicit conversion in Predef
to WrappedString
and WrappedString
extends IndexedSeq[Char]
so you have all goodies that available in it, like:
"Test" foreach println
"Test" map (_ + "!")
Edit
Predef
has augmentString
conversion that has higher priority than wrapString
in LowPriorityImplicits
. So String end up being StringLike[String]
, that is also Seq
of chars.