Golang如何按指定分隔符拆分字符串并得到符合要求的切片
解决方案
明确需求:按单个&作为分隔符拆分字符串,连续出现的&&仅将后一个&作为分隔符,前一个&保留到前序片段中。
方法1:正则表达式拆分(实现简单)
使用正则&(?=[^&])匹配符合要求的分隔符:该正则仅匹配后一位不是&的&字符,连续&&中只有靠后的&会被识别为分隔符。
Go代码示例:
package main import ( "fmt" "regexp" ) func main() { foo := "foo=1&bar=2&&a=8" re := regexp.MustCompile(`&(?=[^&])`) result := re.Split(foo, -1) fmt.Println(result) // 输出:[foo=1 bar=2& a=8] }
方法2:手动遍历实现(性能更高)
如果拆分逻辑需要更高性能、避免正则的额外开销,可以自行遍历字符实现拆分逻辑:
func splitSingleAmpersand(s string) []string { var res []string start := 0 for i := 0; i < len(s); i++ { if s[i] == '&' { // 下一个字符也是&,跳过当前&,不拆分 if i+1 < len(s) && s[i+1] == '&' { i++ continue } // 单个&作为分隔符,切分片段 res = append(res, s[start:i]) start = i + 1 } } // 追加最后一段 if start <= len(s) { res = append(res, s[start:]) } return res }
调用该方法传入目标字符串即可得到预期结果。
原
strings.Split不符合预期的原因:该方法会将所有匹配到的&都作为分隔符处理,连续&&会被识别为两个独立分隔符,中间自然会生成空字符串片段。
内容的提问来源于stack exchange,提问作者Hexwell
相关产品推荐
相关产品推荐

