如何将字符串拆分为字符

例如,有一个字符串vals = "Test"。如何将其分成t, e, s, t

sam asked 2020-02-13T00:37:56Z
5个解决方案
60 votes

你需要角色吗?

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

需要字节吗?

"Test".getBytes  // Java provides this

需要琴弦吗?

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

您是否需要UTF-32代码点? 好吧,这是一个更艰难的过程。

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")
Rex Kerr answered 2020-02-13T00:39:04Z
53 votes

您可以使用toArray,如下所示:

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

如果需要阵列,可以使用toArray

scala> s.toArray
res2: Array[Char] = Array(T, e, s, t)
aioobe answered 2020-02-13T00:38:32Z
5 votes

另外,应该注意的是,如果您真正想要的不是一个实际的列表对象,而仅仅是做每个字符的事情,那么字符串可以用作Scala中可迭代的字符集合。

for(ch<-"Test") println("_" + ch + "_") //prints each letter on a different line, surrounded by underscores
Dave Griffith answered 2020-02-13T00:39:25Z
5 votes

实际上,您不需要做任何特别的事情。 Predef中已经隐式转换为augmentString,并且wrapString扩展了LowPriorityImplicits,因此您可以使用其中的所有好东西,例如:

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

编辑

PredefaugmentString转换优先级高于LowPriorityImplicits中的wrapString。因此,字符串最终为StringLike[String],也就是Seq字符。

tenshi answered 2020-02-13T00:39:54Z
0 votes

另一种简单的方法可以是-

    "Test".map(lines=>lines+"")
     res34: scala.collection.immutable.IndexedSeq[String] = Vector(T, e, s, t)
Ankita answered 2020-02-13T00:40:14Z
translate from https://stackoverflow.com:/questions/5052042/how-to-split-strings-into-characters-in-scala