包含子串列表中的精确子串的字符串

时间:2016-12-22 11:56:56

标签: scala pattern-matching match contains

Scala初学者在这里,我试图找到所有推文文本,其中包含至少一个关键字中的关键字。

推文:

case class Tweet(user: String, text: String, retweets: Int)

使用示例Tweet("user1", "apple apple", 3)

如果在推文的文本中找到列表关键字中的至少一个关键字,那么 wordInTweet 应该返回true。

我尝试像下面那样实现它:

def wordInTweet(tweet: Tweet, keywords: List[String]): Boolean = {
    keywords.exists(tweet.text.equals(_))
}

但是,如果推文的文字是音乐,并且给定关键字的文字音乐,它也会返回 true >

  

我正努力寻找一种方法,只有在推文时才能返回真实情况   包含完全相同的关键字文字。

我如何实现这一目标?

提前致谢。

1 个答案:

答案 0 :(得分:4)

首先,如果您将keywords视为一个集合会有所帮助,因为集合具有非常高效的belongs函数。

keywords: Set[String]

然后我们需要测试推文中的每个单词,而不是完整的文本。这意味着我们需要将文本拆分为单词。我们在无处不在的" wordCount"中找到了一个无处不在的例子。示例

val wordsInTweet = tweet.text.split("\\W")

接下来,我们把事情放在一起:

def wordInTweet(tweet: Tweet, keywords: Set[String]): Boolean = {
   val wordsInTweet = tweet.text.split("\\W")
   wordsInTweet.exists(word => keywords.contains(word))
}