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
相关产品推荐
相关产品推荐

