如何在Scala中将字符串拆分为字符

时间:2011-02-19 16:40:21

标签: string scala character-encoding split character

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

5 个答案:

答案 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)

实际上你不需要做任何特别的事情。已经在PredefWrappedStringWrappedString扩展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)