Подтвердить что ты не робот

Как разбить строки на символы в Scala

Например, существует строка val s = "Test". Как вы разделите его на t, e, s, t?

4b9b3361

Ответ 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 символов.