【问题标题】:String Containing Exact Substring from Substring List包含来自子字符串列表的确切子字符串的字符串
【发布时间】:2016-12-22 20:23:33
【问题描述】:

这里是 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(_))
}

但是,如果推文的文本是 music 并且给定关键字的文本是 musica,它也会返回 true。

我正在努力寻找一种仅在推文时返回 true 的方法 包含完全相同的关键字文本。

我怎样才能做到这一点?

提前致谢。

【问题讨论】:

  • 看起来下面的回答对你有用,但考虑List#sliding:scala> "my tweet".sliding("my".size).toList res2: List[String] = List(my, "y ", " t", tw, we, ee, et)

标签: scala pattern-matching match contains


【解决方案1】:

首先,如果您将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))
}

【讨论】:

  • 感谢@maasg 的回答。不幸的是,我无法更改方法签名,它是这样给我的,所以我无法将其更改为Set[String]。而且,留下List[String] 我得到:Type mismatch, expected: (String) => Boolean, actual (String) => String。
  • 然后使用List的contains函数。
猜你喜欢
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
相关资源
最近更新 更多