繁体   English   中英

如何在拆分后从切片中修剪 Go 中的空格

[英]How can I trim whitespaces in Go from a slice after Split

我有一个以逗号分隔的字符串,因此它可以是test1, test2, test3test1,test2,test3test1, 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)
   }
}

https://golang.org/pkg/encoding/csv#Reader.TrimLeadingSpace

如果您已经使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM