如何使string.contains与列表一起使用

时间:2014-11-15 20:20:39

标签: vb.net string contains

所以我有这个机器人我正在制作一个在Skype聊天中过滤掉诅咒词的人。 我没有这么做,所以我的代码很长,我想要它,所以有一个巨大的诅咒单词列表,例如:

If Msg.Contains("swear1") Or Msg.Contains("swear2") Then
    c.SendMessage("{---------Bot----------}" + vbNewLine + "DO NOT SWEAR!" + vbNewLine + "{-------------------------------------------}")
End If

我尝试过创建一个数组和一个包含多个值的字符串,并没有真正发挥得太好,因为在有人说出触发词后它没有执行该功能。所以我想知道是否有一种方法可以在不使用

的情况下将一大堆诅咒词集合在一起
Msg.Contains("swear1")

或者

Msg.Contains("swear2")

等等,所以一切都会被保留下来。 任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:0)

您使用Swear单词集合并检查字符串。 .Any方法获取数组并在内部创建一个For / loop,其中word是此循环的变量名,并表示数组中的每个字符串,以使用我们的SwearWords.Contains(word)布尔表达式进行测试,如果任何表达式等于True,则返回True

Dim swearWordExists As Boolean = False
Dim msg As String = "swear1! has a swear word with extra text but still found"
Dim SwearWords As New List(Of String)
' fill it with your swear words
SwearWords.AddRange(New String() {"swear1", "swear2", "etc..."})
' then
If Not msg.Contains(" ") Then
  ' msg only has one word so check it
  If SwearWords.Contains(msg) OrElse SwearWords.Any(Function(words) msg.Contains(words)) Then
    swearWordExists = True
  End If
Else
  Dim words = Regex.Split(msg, "\W")
  If Not words.Any(Function(word) SwearWords.Contains(word)) Then
    If words.Any(Function(word) SwearWords.Any(Function(swear) word.Contains(swear))) Then
      swearWordExists = True
    End If
  Else
    swearWordExists = True
  End If
End If
If swearWordExists Then
  MessageBox.Show("Why are you swearing?")
End If

答案 1 :(得分:0)

您可以像这样压缩代码

Dim swears = New List(Of [String])() From {"swear1", "swear2"}
If Regex.IsMatch("[your message]", String.Format("({0})", String.Join("|", swears))) Then
    MsgBox("Don't swear!")
End If

凡发誓将是你所有发誓的名单,你不想让别人说出

它做了什么,它需要'发誓'中的所有字符串并将它们置于这种格式:( swear1 | swear2)然后正则表达式将看到你的消息是否包含'swear1'或'swear2'等等,如果你有更多。

答案 2 :(得分:0)

一种简单但不是超级高效的方法是将字符串转换为列表然后使用列表相交功能

http://msdn.microsoft.com/en-us/library/vstudio/bb910215(v=vs.90).aspx