如何将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
已经有隐式转换为WrappedString
, WrappedString
扩展了IndexedSeq[Char]
所以你有所有可用的好东西,比如:
"Test" foreach println "Test" map (_ + "!")
编辑
Predef
augmentString
转换的优先级高于wrapString
中的LowPriorityImplicits
。 所以String最终是StringLike[String]
,也就是字符的Seq
。