[英]How can I trim whitespaces in Go from a slice after Split
我有一个以逗号分隔的字符串,因此它可以是test1, test2, test3
或test1,test2,test3
或test1, test2, test3
。
我目前在 Go 中使用strings.Split(s, ",")
拆分它,但现在我有一个[]string
,它可以包含具有任意数量空格的元素。
我怎样才能轻松地修剪它们? 这里的最佳实践是什么?
这是我当前的代码
var property= os.Getenv(env.templateDirectories)
if property != "" {
var dirs = strings.Split(property, ",")
for index,ele := range dirs {
dirs[index] = strings.TrimSpace(ele)
}
return dirs
}
我来自 Java,并假设 Go 中也有 map/reduce 等功能,因此问题。
您可以在循环中使用strings.TrimSpace
。 如果您也想保留顺序,可以使用索引而不是值作为循环参数:
编辑:要在没有点击的情况下查看代码:
package main
import (
"fmt"
"strings"
)
func main() {
input := "test1, test2, test3"
slc := strings.Split(input , ",")
for i := range slc {
slc[i] = strings.TrimSpace(slc[i])
}
fmt.Println(slc)
}
无需循环的简单方法
test := "2 , 123, 1"
result := strings.Split(strings.ReplaceAll(test," ","") , ",")
encoding/csv
包可以处理这个:
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
for _, each := range []string{
"test1, test2, test3", "test1, test2, test3", "test1,test2,test3",
} {
r := csv.NewReader(strings.NewReader(each))
r.TrimLeadingSpace = true
s, e := r.Read()
if e != nil {
panic(e)
}
fmt.Printf("%q\n", s)
}
}
如果您已经使用regexp
可能是你可以使用正则表达式拆分:
regexp.MustCompile(`\s*,\s*`).Split(test, -1)
此解决方案可能比标准的 Split + TrimSpaces 慢,但更灵活。 例如,如果您想跳过空字段,您可以:
regexp.MustCompile(`(\s*,\s*)+`).Split(test, -1)
或使用多个分隔符
regexp.MustCompile(`\s*[,;]\s*`).Split(test, -1)
您可以在go playground 中测试它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.