web-dev-qa-db-ger.com

So teilen Sie Strings in Scala in Zeichen auf

Zum Beispiel gibt es einen String-Wert s = "Test". Wie trennst du es in t, e, s, t?

45
sam

Sie können toList wie folgt verwenden:

scala> s.toList         
res1: List[Char] = List(T, e, s, t)

Wenn Sie ein Array wünschen, können Sie toArray verwenden.

scala> s.toArray
res2: Array[Char] = Array(T, e, s, t)
51
aioobe

Benötigen Sie Charaktere?

"Test".toList    // Makes a list of characters
"Test".toArray   // Makes an array of characters

Benötigen Sie Bytes?

"Test".getBytes  // Java provides this

Benötigen Sie Saiten?

"Test".map(_.toString)    // Vector of strings
"Test".sliding(1).toList  // List of strings
"Test".sliding(1).toArray // Array of strings

Benötigen Sie UTF-32-Codepunkte? Okay, das ist schwieriger.

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
Rex Kerr

Darüber hinaus sollte beachtet werden, dass Strings in Scala als wiederholbare Sammlungen von Zeichen verwendet werden können, wenn das, was Sie wirklich wollen, kein eigentliches Listenobjekt ist, sondern lediglich etwas mit jedem Zeichen tun soll

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

Eigentlich müssen Sie nichts Besonderes tun. Es gibt bereits eine implizite Konvertierung in Predef in WrappedString und WrappedString erweitert IndexedSeq[Char], so dass Sie alle verfügbaren Goodies haben, wie:

"Test" foreach println
"Test" map (_ + "!") 

Bearbeiten

Predef hat augmentString-Konvertierung, die eine höhere Priorität hat als wrapString in LowPriorityImplicits. String ist also StringLike[String], also Seq von Zeichen. 

5
tenshi

Ein anderer einfacher Weg kann sein - 

    "Test".map(lines=>lines+"")
     res34: scala.collection.immutable.IndexedSeq[String] = Vector(T, e, s, t)
0
Ankita