2011-09-03 13 views
13

文字列を交互に単語に分割したい。常に偶数があります。文字列を交互に単語に分割する(Scala)

val text = "this here is a test sentence" 

は私のように右の結果を与える私は

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

を作ってみた

"this", "is", "test" 

"here", "a", "sentence" 

を含むいくつかの順序付きコレクション型に変換する必要があります2つの配列。

もっとエレガントにできますか?

+0

@Paulです同意、消去タグ – elm

答えて

27
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) 
+4

+1「転記」 – agilesteel

+1

どのようなエレガントなソリューション! :) –

2

だから、どのようにこのことについて: スカラ>ヴァル・テキスト= "ここでは、これはテスト文である" テキスト: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> 
関連する問題