How to split strings into characters in Scala

StringScalaCharacter EncodingSplitCharacter

String Problem Overview


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

String Solutions


Solution 1 - String

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

Solution 2 - String

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)

Solution 3 - String

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.

Solution 4 - String

Additionally, it should be noted that if what you actually want isn't an actual list object, but simply to do something which each character, then Strings can be used as iterable collections of characters in Scala

for(ch<-"Test") println("_" + ch + "_") //prints each letter on a different line, surrounded by underscores

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsamView Question on Stackoverflow
Solution 1 - StringRex KerrView Answer on Stackoverflow
Solution 2 - StringaioobeView Answer on Stackoverflow
Solution 3 - StringtenshiView Answer on Stackoverflow
Solution 4 - StringDave GriffithView Answer on Stackoverflow