【问题标题】:strings.Contains() returns always false [closed]strings.Contains() 总是返回 false [关闭]
【发布时间】:2020-09-04 19:31:34
【问题描述】:

在 Go 中,我想检查以下字符串是否在字符串中包含 text/plain。函数strings.Contains() 总是返回false

我本地的go版本是go1.14.3 windows/amd64,我的服务器版本是go1.13.3 linux/amd64

测试代码 (play.golang.org/p/_ikCzWd6438)

var test = "text/plain; charset=utf-8"

fmt.Println("my string:", test)
fmt.Println("strings.Contains(text/plain)", strings.Contains("text/plain", test))
fmt.Println("strings.Contains(text)", strings.Contains("text", test))
fmt.Println("strings.Contains(charset)", strings.Contains("charset", test))

var test2 = strings.ReplaceAll(test, "/", "") // remove slash
fmt.Println("my second string:", test2)
fmt.Println("strings.Contains(textplain)", strings.Contains("textplain", test2))
fmt.Println("strings.Contains(text)", strings.Contains("text", test2))
fmt.Println("strings.Contains(charset)", strings.Contains("charset", test2))

输出

my string: text/plain; charset=utf-8
strings.Contains(text/plain) false
strings.Contains(text) false
strings.Contains(charset) false
my second string: textplain; charset=utf-8
strings.Contains(textplain) false
strings.Contains(text) false
strings.Contains(charset) false

那么为什么返回strings.Contains() 总是'false'?

【问题讨论】:

  • Contains 的参数顺序错误。使用 `Contains(test,"text/plain")
  • @Burak 真丢人。你是对的!
  • 请注意,永远不要使用contains 来测试媒体类型。这将导致误报。有人可能正在使用“customtext/plain”或text/plain+mycustomizations 或什至image/jpeg; foo=text/plain 或任何其他随机组合的媒体类型,它们会愚弄你的逻辑,但仍然有效。相反,使用 mime.ParseMediaType 正确解析媒体类型。
  • @flimzy 我向外部页面发送请求并检查目标页面是否为文本文件(内容类型文本/纯文本)。有些页面在内容类型中仍然有一个字符集,所以我只想检查它是否是内容类型包含文本/纯文本。这只是我测试功能的一小部分。
  • 我明白你想要做什么。我是说检查字符串是否包含会导致误报,因此您应该正确解析媒体类型。 Content-Type: footext/plainbarContent-Type: text/plain+customContent-Type: image/jpeg; foo=text/plain 都是有效的 Content-Type 值,都会破坏您的测试。

标签: string go compare contains


【解决方案1】:

根据the docs

func Contains(s, substr string) bool

包含报告 substr 是否在 s 内。

第一个参数s 是原始字符串,第二个参数substr 是您搜索的子字符串。在你的情况下,情况正好相反。

例如,应该是strings.Contains(test, "charset"),而不是strings.Contains("charset", test)

【讨论】:

  • 哦,不。这很有意义:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多