string - 如何检查文本是否包含Golang列表中的任何单词?

标签 string go

我想检查用户提交的文本中是否有垃圾邮件词。所以这是我编写的函数:

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/

相关文章:

c# - 两个不同的 "strings"是同一个对象实例吗?

iphone - 检测用户是否输入了 UITextField

Go lang 多路复用所有 goroutines 都睡着了 - 死锁

go - 如何将 2 个文件合并或组合成单个文件

Go:安全地将整数转换为 Protocol Buffer 枚举值的最佳实践

string - 格式化包含 '%' golang 的字符串

python - 从列表中查找首选字符串

javascript - 如何测试一个字符串是否等于另一个 javascript

python - 如何增加打印的每行新行的前导空格数?

amazon-web-services - 如何在 Golang 的 AWS Lambda 中支持多个触发器?