2017-01-30 10 views
0

入力線の元の構造(分割なし)と特定のインデックスに基づくフィルタを保持する関数を記述しようとしています。スプリットインデックスに基づくスカラ文字列フィルタ

例は、以下の(パイプ上の分割後)第四の要素は2つのトークン

"1||2||3||4||test or not".split("\\|\\|").filter(_.map(line => line.split("\\s")(4).length>2)) 


I receive the following error; 
error: value split is not a member of Char 

私はこれをどのように修正すればよい

よりも大きくなるように、入力文字列をフィルタ処理しようとしていますか?

+0

この場合、最終結果はどうなりますか? "this || 2 ||はテストかどうか"? – nmat

+0

4番目の要素には常に複数の単語が含まれます。私は、新しいデータ構造が4番目の要素が2ワード以上ある行だけを保持するようにフィルタリングしたい – chattrat423

答えて

2

これは、必要な操作を行う必要があります。関数のより良い名前を探したいかもしれません。

def predicate(index: Int, minSize: Int)(s: String): Boolean = 
    s.split("\\|\\|") match { 
     case e if e.length > index => e(index).split("\\s").length > minSize 
     case _ => false 
    } 


lines.filter(predicate(4, 2)) 
2

あなたはこのようにそれを記述する場合、あなたは省略パラメータが文字列であることを見ることができるようになり、その後のChar

"this||2||is||my||test or not".split("\\|\\|").filter { someString => 
     someString.map { someChar => 
     someChar 
     } 
     true 
    } 
    } 

filterの長い形式はsomeCollection.filter(element => booleanExpression)あります。 mapに似ています。 .filterまたは.mapを適用するたびに、コレクションを分解して要素に操作を適用します。 "...".split("...")の要素は文字列です。文字列の「要素」は文字です。

関連する問題