英文:
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.ParseQuery
和 url.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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论