Question: For example, there is a string val `s = "Test"`. How do you separate it into `t, e, s, t`?

Answer: 
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")

```
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.