我想检查用户提交的文本中是否有垃圾邮件词。所以这是我编写的函数:
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
}
}
}
}
但是我在
mismatched type rune and string
上得到了word == sapmWord
。我知道这是因为
removePunctuation
返回的 rune (aka 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
}
关于string - 如何检查文本是否包含Golang列表中的任何单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59984686/