当前位置: > > > > 如何检查文本是否包含 Golang 列表中的任何单词?
来源:stackoverflow
2024-04-21 22:09:34
0浏览
收藏
各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《如何检查文本是否包含 Golang 列表中的任何单词?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!
问题内容
我想检查用户提交的文本中是否有垃圾邮件单词。这是我编写的函数:
func TextHasSpamWords(text string, spamWords []string) bool { removePunctuation := func(r rune) rune { if strings.ContainsRune(".,:;", r) { return -1 } else { return r } } text = strings.Map(removePunctuation, text) sort.Strings(spamWords) for _, word := range text { for _, sapmWord := range spamWords { if word == sapmWord { return true } } } }
但是我在 word == sapmword
处得到 mismatched type rune 和 string
。 我知道这是因为 removepunctuation
返回符文(又名 int32),它无法与字符串(unit8)进行比较。但是删除标点符号对于该函数的工作是必不可少的,所以我想知道如何解决这个问题?或者也许有更惯用的方法来做到这一点?
解决方案
您正在尝试比较字母和字符串。
当您执行 for _, word := range text
时,它不是单词,而是 letter
。如果您想要单词,则必须使用 textarr := strings.split(text, " ")
(按空格分割)将字符串拆分为单词切片
func texthasspamwords(text string, spamwords []string) bool { removepunctuation := func(r rune) rune { if strings.containsrune(".,:;", r) { return -1 } else { return r } } text = strings.map(removepunctuation, text) textarr := strings.split(text, ` `) sort.strings(spamwords) for _, word := range textarr { for _, sapmword := range spamwords { if word == sapmword { return true } } } return false }
考虑使用地图进行查找
lookupspam := make(map[string]bool) for _, v := range spamwords { lookupspam[v] = true }
然后代替
for _, word := range textarr { for _, sapmword := range spamwords { if word == sapmword { return true } } }
可以使用类似的东西
for _, word := range textArr { _,found:=lookupSpam[word] if found { return true } }
如果您重复检查同一组单词,则设置一次地图并重复使用
到这里,我们也就讲完了《如何检查文本是否包含 Golang 列表中的任何单词?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注公众号,带你了解更多关于的知识点!