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

Разделить строку на переменные слова (Scala)

Я хочу разбить String на чередующиеся слова. Всегда будет четное число.

например.

val text = "this here is a test sentence"

должен преобразовываться в некоторый упорядоченный тип коллекции, содержащий

"this", "is", "test"

и

"here", "a", "sentence"

Я придумал

val (l1, l2) = text.split(" ").zipWithIndex.partition(_._2 % 2 == 0) match {
  case (a,b) => (a.map(_._1), b.map(_._1))}

который дает мне правильные результаты в виде двух массивов.

Можно ли это сделать более элегантно?

4b9b3361

Ответ 1

scala> val s = "this here is a test sentence"
s: java.lang.String = this here is a test sentence

scala> val List(l1, l2) = s.split(" ").grouped(2).toList.transpose
l1: List[java.lang.String] = List(this, is, test)
l2: List[java.lang.String] = List(here, a, sentence)

Ответ 2

Итак, как насчет этого:    scala > val text = "это тестовое предложение"   text: java.lang.String = this здесь тестовое предложение

scala> val Reg = """\s*(\w+)\s*(\w+)""".r
Reg: scala.util.matching.Regex = \s*(\w+)\s*(\w+)


scala> (for(Reg(x,y) <- Reg.findAllIn(text)) yield(x,y)).toList.unzip
res8: (List[String], List[String]) = (List(this, is, test),List(here, a, sentence))

scala>