Comment séparer les chaînes en caractères dans Scala
par exemple, il y a une chaîne val s = "Test"
. Comment voulez-vous de les séparer en t, e, s, t
?
5 réponses
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 caractères?
"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 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 faut noter que si ce que vous voulez réellement n'est pas un objet liste réel, mais simplement pour faire quelque chose que chaque caractère, alors les chaînes peuvent être utilisées comme des collections itérables de caractères dans Scala
for(ch<-"Test") println("_" + ch + "_") //prints each letter on a different line, surrounded by underscores
en fait, vous n'avez pas besoin de faire quoi que ce soit de spécial. Il y a déjà une conversion implicite dans Predef
WrappedString
et WrappedString
extends IndexedSeq[Char]
donc vous avez toutes les bonnes choses qui sont disponibles dedans, comme:
"Test" foreach println
"Test" map (_ + "!")
Modifier
Predef
a augmentString
conversion qui a une priorité plus élevée que wrapString
LowPriorityImplicits
. Donc la corde finit par être StringLike[String]
, qui est aussi Seq
de caractères.
une autre façon simple peut être --
"Test".map(lines=>lines+"")
res34: scala.collection.immutable.IndexedSeq[String] = Vector(T, e, s, t)