Например, существует строка val s = "Test". Как вы разделите его на t, e, s, t?
Как разбить строки на символы в Scala
Ответ 1
Вы можете использовать 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
Вам нужны персонажи?
"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")
Ответ 3
Кроме того, следует отметить, что если то, что вы действительно хотите, не является фактическим объектом списка, а просто для того, чтобы делать что-либо, что каждый символ, то строки могут использоваться как итеративные коллекции символов в Scala
for(ch<-"Test") println("_" + ch + "_") //prints each letter on a different line, surrounded by underscores
Ответ 4
На самом деле вам не нужно ничего особенного делать. Существует уже неявное преобразование в Predef to WrappedString и WrappedString extends IndexedSeq[Char], поэтому у вас есть все полезные свойства, доступные в нем, например:
"Test" foreach println
"Test" map (_ + "!")
Изменить
Predef имеет преобразование augmentString, которое имеет более высокий приоритет, чем wrapString в LowPriorityImplicits. Итак, String заканчивается StringLike[String], то есть также Seq символов.