1

我有一个单词列表作为列表,我想提取长度可能在 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)
4

3 回答 3

5
val sentence = args(0)
val words = sentence.split(" ")
val results = words.filter(word => word.length >= 5 && word.length <= 10)
于 2013-01-24T03:24:10.117 回答
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}
于 2013-01-24T05:11:39.630 回答
0

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

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

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

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

于 2013-01-24T10:09:20.483 回答