如何将string拆分成Scala中的字符

例如,有一个stringval s = "Test" 。 你怎么把它分成t, e, s, t

你可以使用toList如下:

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

如果你想要一个数组,你可以使用toArray

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

你需要angular色吗?

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

你需要字节吗?

 "Test".getBytes // Java provides this 

你需要string吗?

 "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") 

此外,应该注意的是,如果你真正想要的不是一个实际的列表对象,而只是做一些每个字符,那么string可以用作Scala中可迭代的字符集合

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

其实你不需要做任何特别的事情。 Predef已经有隐式转换为WrappedStringWrappedString扩展了IndexedSeq[Char]所以你有所有可用的好东西,比如:

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

编辑

Predef augmentString转换的优先级高于wrapString中的LowPriorityImplicits 。 所以String最终是StringLike[String] ,也就是字符的Seq