猿问

使用否定关键字进行关键字搜索

我有一个关于 Go 中关键字搜索的简单问题。


我想使用正负关键字搜索字符串


func keyword(itemTitle string, keywords string) bool {

    splits := strings.Split(keywords, ",")

    for _, item := range splits {

        item = strings.TrimSpace(item)


        fmt.Println(strings.ToUpper(itemTitle))

        fmt.Println(strings.ToUpper(item))


        if strings.Contains(item,"-") {

            item = item[1:]

            if strings.Contains(strings.ToUpper(itemTitle), strings.ToUpper(item)) {

                return false

            }

        }


        item = item[1:]

        fmt.Println(strings.ToUpper(item))


        if strings.Contains(strings.ToUpper(itemTitle), strings.ToUpper(item)) {

            return true

        }

    }


    return false

}

这是我的搜索方法


func TestKeyword(t *testing.T) {

    test1 := "Pokemon Nintendo Switch Cool Thing"

    keywordTest1 := "+pokemon,-nintendo"


    if keyword(test1, keywordTest1) {

        fmt.Println("matched")

    } else {

        fmt.Println("test")

    }


    test2 := "Pokemon Cards Cool"


    if keyword(test2, keywordTest1) {

        fmt.Println("matched")

    } else {

        fmt.Println("test")

    }

}

我的测试用例我理解为什么它不起作用,因为 +amd 是切片中的第一个,并且它的 ofc 将返回 true 并且不测试任何其他类似 -radeon 但我只是有点难过要做什么。


输出给定


matched

matched

预期产出


test

matched


墨色风雨
浏览 86回答 1
1回答

www说

我更新了你的搜索功能但保留了签名func keyword(itemTitle string, keywords string) bool {    a := strings.ToUpper(itemTitle)    b := strings.ToUpper(keywords)    keys := strings.Split(strings.Replace(b, "-", " ", -1), ",")    for _, key := range keys {        key = strings.TrimSpace(key)        if strings.Contains(a, key) {            return true        }    }    return false}并使用通过测试和失败测试更新您的测试功能,看看它是如何工作的。func TestKeyword(t *testing.T) {    test1 := "Pokemon Nintendo Switch Cool Thing"    keywordTest1 := "+pokemon,-nintendo"    if keyword(test1, keywordTest1) {        t.Log("matched")    } else {        t.Fail()    }    test2 := "Pokemon Cards Cool"    if keyword(test2, keywordTest1) {        t.Log("matched")    } else {        t.Fail()    }}关于第二次测试失败的关键字,如果需要,您可以通过正则表达式传递它以仅获取字母数字字符。
随时随地看视频慕课网APP

相关分类

Go
我要回答