How to split a string by a delimiter in Golang

huangapple go评论85阅读模式
英文:

How to split a string by a delimiter in Golang

问题

我想通过一个分隔符来拆分一个字符串,结果应该是一个切片。

例如:

给定的字符串可能是这样的:

foo := "foo=1&bar=2&&a=8"

结果应该是这样的:

result := []string{
    "foo=1",
    "bar=2&",
    "a=8"
}

我的意思是我可以使用strings.split(foo, "&")来拆分,但是结果不符合我的要求。

// 使用 strings.split() 的结果
result := []string{
    "foo=1",
    "bar=2",
    "",
    "a=8"
}
英文:

I want to split a string by a delimiter, and the result should be a slice.

For example:

The given string might be like this:

 foo := "foo=1&bar=2&&a=8"

The result should be like

 result := []string{
    "foo=1",
    "bar=2&",
    "a=8"
}

I mean i can use strings.split(foo, "&") to split but the result does not meet my requirements.

 // the result with strings.split()
 result := []string{
    "foo=1",
    "bar=2",
    "",
    "a=8"
}

答案1

得分: 1

为什么不使用url.ParseQuery呢?如果你需要处理特殊字符,比如&(作为分隔符),那么它需要被转义为%26

//m, err := url.ParseQuery("foo=1&bar=2&&a=8")
m, err := url.ParseQuery("foo=1&bar=2%26&a=8") // 将 bar 的 & 转义为 %26

fmt.Println(m) // map[a:[8] bar:[2&] foo:[1]]

你通常会这样对参数进行 URL 编码:

q := url.Values{}

q.Add("foo", "1")
q.Add("bar", "2&")
q.Add("a", "8")

fmt.Println(q.Encode()) // a=8&bar=2%26&foo=1

请注意,以上代码只是演示了如何使用 url.ParseQueryurl.Values 进行 URL 解析和编码。

英文:

Why not use url.ParseQuery. If you need a special characters like & (which is the delimiter) to not be treated as such, then it needs to be escaped (%26):

//m, err := url.ParseQuery("foo=1&bar=2&&a=8")
m, err := url.ParseQuery("foo=1&bar=2%26&a=8") // escape bar's & as %26


fmt.Println(m) // map[a:[8] bar:[2&] foo:[1]]

https://play.golang.org/p/zG3NEL70HxE


You would typically URL encode parameters like so:

q := url.Values{}

q.Add("foo", "1")
q.Add("bar", "2&")
q.Add("a", "8")

fmt.Println(q.Encode()) // a=8&bar=2%26&foo=1

https://play.golang.org/p/hSdiLtgVj7m

huangapple
  • 本文由 发表于 2021年10月11日 21:32:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/69527071.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定