案例:
有一个log日志文件,里面每行日志大概格式如下:其中_代表空格 ab_c_"abc_adadfasd"_def_"dddd" 需要对这样的数据进行处理,切分成数组。切分规则如下: (1)双引号""里面的空格不切分,分为整体 (2)双引号""外的空格是分隔符 这样上面这样数据切分后的数组如下: [ "ab", "c", "adadfasd", "def", "dddd" ]
package main
import "fmt"
func main() {
str := `ab_c_"abc_adadfasd"_def_"dddd"`
// 定义一个 []string 类型的out
var out []string
temp := ""
// 定义一个 bool类型的标记 默认为false
var flag bool
//遍历字符串
for k, v := range str {
//将v转化为string类型
s := fmt.Sprintf("%c", v)
//如果 s 不等于 " 并且 _ 直接追加到temp中
if s != "_" && s != `"` {
temp += s
} else if s == "_" && flag == true { //如果 s 等于 _ 并且比flag 是true的话直接追加到temp中
temp += s
} else if s == "_" && flag == false { //如果 s 等于 _ 并且比flag 是false 将temp 追加到out中 并把temp重置为空字符串
out = append(out, temp)
temp = ""
} else if s == `"` && k == len(str)-1 { // 如果s 以 " 结尾 直接将temp追加到out中去
out = append(out, temp)
} else if s == `"` && flag == false { //如果 s 等于 " flog == false 将flag 设置为true 表示 " "的左引号出现
flag = true
} else if s == `"` && flag == true { //如果 s 等于 " flog == true 将flag 设置为true 表示 " "的右引号出现
flag = false
}
}
//遍历数组
for _, v := range out {
fmt.Println(v)
}
}
var code = "4afa27e5-234d-4a12-8fbc-2771fb2b0db1"