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

时间:2018-03-22 12:55:03

标签: go

我有一个逗号分隔的字符串,所以可能是 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等功能,因此问题。

4 个答案:

答案 0 :(得分:8)

您可以在循环中使用$sql = "SELECT episode.episode_id,episode.ep_title , series.series_id, series.title, series.pic FROM episode RIGHT JOIN series ON episode.series_oid=series.series_id UNION SELECT * FROM movies" 。如果您还想保留顺序,可以使用索引而不是值作为循环参数:

Go Playground Example

编辑:要查看没有点击的代码:

strings.TrimSpace

答案 1 :(得分:1)

不循环的简便方法

test := "2   , 123,    1"
result := strings.Split(strings.ReplaceAll(test," ","") , ",")

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您已经使用了 regexp,您可以使用正则表达式进行拆分:

regexp.MustCompile(`\s*,\s*`).Split(test, -1)

此解决方案可能比标准的 Split + TrimSpaces 慢,但更灵活。例如,如果您想跳过空字段,您可以:

regexp.MustCompile(`(\s*,\s*)+`).Split(test, -1)

或使用多个分隔符

regexp.MustCompile(`\s*[,;]\s*`).Split(test, -1)

您可以在 the go playground 中对其进行测试。