例如,有一个字符串val s = "Test"
。如何将其分为t, e, s, t
?
答案 0 :(得分:59)
你需要角色吗?
"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")
答案 1 :(得分:52)
您可以按如下方式使用toList
:
scala> s.toList
res1: List[Char] = List(T, e, s, t)
如果您需要数组,可以使用toArray
scala> s.toArray
res2: Array[Char] = Array(T, e, s, t)
答案 2 :(得分:5)
此外,应该注意的是,如果你真正想要的不是一个真正的列表对象,而只是为每个字符做一些事情,那么字符串可以用作Scala中可迭代的字符集合
for(ch<-"Test") println("_" + ch + "_") //prints each letter on a different line, surrounded by underscores
答案 3 :(得分:5)
实际上你不需要做任何特别的事情。已经在Predef
到WrappedString
和WrappedString
扩展IndexedSeq[Char]
进行了隐式转换,因此您可以使用其中的所有内容,例如:
"Test" foreach println
"Test" map (_ + "!")
Predef
的{{1}}转化优先级高于augmentString
中的wrapString
。所以字符串最终为LowPriorityImplicits
,也就是字符StringLike[String]
。
答案 4 :(得分:0)
另一种简单的方法可以是 -
"Test".map(lines=>lines+"")
res34: scala.collection.immutable.IndexedSeq[String] = Vector(T, e, s, t)