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?

43
demandé sur aioobe 2011-02-19 19:40:21

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)
49
répondu aioobe 2016-06-07 21:20:12

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")
59
répondu Rex Kerr 2011-02-20 01:03:07

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
5
répondu Dave Griffith 2011-02-19 16:54:50

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 PredefWrappedString 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 wrapStringLowPriorityImplicits. Donc la corde finit par être StringLike[String], qui est aussi Seq de caractères.

5
répondu tenshi 2011-02-19 17:22:32

une autre façon simple peut être --

    "Test".map(lines=>lines+"")
     res34: scala.collection.immutable.IndexedSeq[String] = Vector(T, e, s, t)
0
répondu Shelly Verma 2018-01-17 11:01:20