You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言strings.IndexAny判断逻辑及ContainsAny工作原理咨询

Go语言strings.IndexAny与ContainsAny的区别及代码逻辑解释

核心问题原因

你混淆了Go标准库中两个字符串处理函数的返回值规则,你查阅的是strings.ContainsAny的文档,但代码中实际使用的是strings.IndexAny,二者功能和返回值完全不同。

两个函数的定义差异

  • strings.ContainsAny(s string, chars string) bool
    该函数返回布尔值,只要s中包含chars里的任意一个字符就返回true,否则返回false,不存在返回数字1/0的情况。
  • strings.IndexAny(s string, chars string) int
    该函数返回整数值,代表chars中任意一个字符在s里第一次出现的下标索引,如果s中完全不存在chars里的字符则返回-1。

你的代码逻辑解释

你的代码开头已经做了参数校验:

if len(arg[1]) != 1 || len(arg) != 2 {
    fmt.Println("Give me a letter.")
    return
}

这要求合法的输入参数arg[1]一定是长度为1的单字符字符串,这类字符串的有效下标索引只有0,没有索引1的位置。
所以你代码中strings.IndexAny(arg[1], "yw") == 0的判断逻辑是:如果输入的单字符是y或者w,那么匹配到的索引必然是0,条件成立判定为半元音;同理第二个判断匹配元音字符时,匹配成功也只会返回0。

为什么等于1不生效

长度为1的字符串最大索引是0,IndexAny永远不可能返回1,所以==1的判断条件永远不成立。你之前的误解是把ContainsAny返回true的逻辑错误套用到了IndexAny的数字返回值上,才会认为返回1代表匹配成功。

内容的提问来源于stack exchange,提问作者Stanley Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:30:05