Scala根据条件从列表中提取

时间:2013-01-24 03:20:47

标签: list scala map slice

我有一个单词列表作为列表,我想提取长度在5到10之间的单词,我使用下面的代码,但似乎没有用。我也只能使用val而不是var。

val sentence = args(0)
val words = sentence.split(" ")
val fullsort = words.sortBy(w => w.length -> w)
val med = fullsort.map(x => if(x.length>3 && x.length<11) x)

3 个答案:

答案 0 :(得分:5)

val sentence = args(0)
val words = sentence.split(" ")
val results = words.filter(word => word.length >= 5 && word.length <= 10)

答案 1 :(得分:1)

试试这个

val sentence = args(0)
val words = sentence.split(" ")
val fullsort = words.sortBy(w => w.length -> w)

val med = fullsort collect {case x:String if (x.length >= 5 && x.length <= 10) => x}

答案 2 :(得分:0)

另一种选择是让正则表达式为您完成更多工作:

val wordLimitRE  = "\\b\\w{5,10}\\b".r
val wordIterator = wordLimitRE.findAllMatchIn(sentence).map {_.toString}  

这个特殊的正则表达式以单词边界模式 \ b 开始,然后是一个范围限制匹配的多个单词字符 \ w {lower,最后} 然后是另一个单词边界模式 \ b

方法findAllMatchIn为每个匹配返回Iterator[Regex.Match](由于单词边界模式,匹配不重叠)。 map {_.toString}会返回Iterator[String]