2017-01-30 50 views
0

試圖編寫一個函數,該函數將保留輸入行的原始結構(不分割)並基於某個索引進行過濾。下面基於拆分索引的Scala字符串過濾器

實施例是試圖以過濾輸入字符串,使得第四元件(在管道上分割後)大於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

這種情況下的最終結果是什麼? 「這個|| 2 ||是||測試還是不」? – nmat

+0

第四個元素將始終包含多個單詞。我想過濾,以便新的數據結構僅保留第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

如果你把它寫這樣,你就可以看到,省略的參數是一個字符串,然後一個字符

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

filter長格式爲someCollection.filter(element => booleanExpression)。類似於map。每次申請.filter.map時,您都可以解構一個集合並對這些元素應用操作。 "...".split("...")的元素是字符串。字符串的「元素」是字符。