Par exemple, il existe une chaîne val s = "Test"
. Comment séparez-vous le t, e, s, t
?
Vous pouvez utiliser toList
comme suit:
scala> s.toList
res1: List[Char] = List(T, e, s, t)
Si vous voulez un tableau, vous pouvez utiliser toArray
scala> s.toArray
res2: Array[Char] = Array(T, e, s, t)
Avez-vous besoin de personnages?
"Test".toList // Makes a list of characters
"Test".toArray // Makes an array of characters
Avez-vous besoin d'octets?
"Test".getBytes // Java provides this
Avez-vous besoin de cordes?
"Test".map(_.toString) // Vector of strings
"Test".sliding(1).toList // List of strings
"Test".sliding(1).toArray // Array of strings
Avez-vous besoin de points de code UTF-32? Ok, c'est un plus difficile.
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")
En outre, il convient de noter que si ce que vous voulez réellement n'est pas un objet de liste, mais simplement de faire quelque chose pour chaque caractère, alors les chaînes de caractères peuvent être utilisées comme des ensembles de caractères itérables dans Scala
for(ch<-"Test") println("_" + ch + "_") //prints each letter on a different line, surrounded by underscores
En fait, vous n'avez rien de spécial à faire. Il y a déjà une conversion implicite dans Predef
à WrappedString
et WrappedString
étend IndexedSeq[Char]
afin que vous ayez tous les goodies disponibles, comme
"Test" foreach println
"Test" map (_ + "!")
Predef
a augmentString
conversion qui a une priorité supérieure à wrapString
dans LowPriorityImplicits
. Donc, String finit par être StringLike[String]
, c'est aussi Seq
de caractères.
Un autre moyen simple peut être -
"Test".map(lines=>lines+"")
res34: scala.collection.immutable.IndexedSeq[String] = Vector(T, e, s, t)