Разделить строку на чередующиеся слова (Scala) - PullRequest
13 голосов
/ 03 сентября 2011

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

например,

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))}

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

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

Ответы [ 2 ]

28 голосов
/ 03 сентября 2011
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 голосов
/ 03 сентября 2011

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

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...