【问题标题】:How to trim leading and trailing white spaces of a string?如何修剪字符串的前导和尾随空格?
【发布时间】:2026-01-02 12:25:02
【问题描述】:

在Go中修剪字符串变量的前导和尾随空格的有效方法是什么?

【问题讨论】:

  • 在线文档准确描述了正在发生的事情,并提供了可运行和可编辑的示例!
  • 希望这个可以被“Ruby strip golang”搜索到

标签: go


【解决方案1】:

strings.TrimSpace(s)

例如,

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "\t Hello, World\n "
    fmt.Printf("%d %q\n", len(s), s)
    t := strings.TrimSpace(s)
    fmt.Printf("%d %q\n", len(t), t)
}

输出:

16 "\t Hello, World\n "
12 "Hello, World"

【讨论】:

  • 尝试 "\t Hello,\nWorld\n " 不起作用 :( ... 如何删除换行符?
  • 它仍然会修剪开头和结尾,但不会删除中间的换行符,因为修剪不是这样做的。您必须使用 strings.Replace 或类似的东西来删除字符串中间的换行符。
【解决方案2】:

go 中有很多函数可以修剪字符串。

在那里看到他们:Trim

这是一个示例,改编自文档,删除了前导和尾随空格:

fmt.Printf("[%q]", strings.Trim(" Achtung  ", " "))

【讨论】:

  • 如何修剪\t\n? fmt.Printf("%q", strings.Trim("\t\t\t\t", `! \t`)) 不工作
  • @aokaddaoc 你试过strings.TrimSpace(str)吗?
【解决方案3】:
package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.TrimSpace(" \t\n Hello, Gophers \n\t\r\n"))
}

输出: 你好,地鼠

只需点击此链接 - https://golang.org/pkg/strings/#TrimSpace

【讨论】:

    【解决方案4】:

    为了修剪你的字符串,Go 的“字符串”包有 TrimSpace()Trim() 修剪前导和尾随空格的函数。

    查看documentation 了解更多信息。

    【讨论】:

      【解决方案5】:

      正如@Kabeer 所提到的,您可以使用 TrimSpace,这是 golang 文档中的一个示例:

      package main
      
      import (
          "fmt"
          "strings"
      )
      
      func main() {
          fmt.Println(strings.TrimSpace(" \t\n Hello, Gophers \n\t\r\n"))
      }
      

      【讨论】:

        【解决方案6】:

        @peterSO 有正确答案。我在这里添加更多示例:

        package main
        
        import (
            "fmt"
            strings "strings"
        )
        
        func main() { 
            test := "\t pdftk 2.0.2  \n"
            result := strings.TrimSpace(test)
            fmt.Printf("Length of %q is %d\n", test, len(test))
            fmt.Printf("Length of %q is %d\n\n", result, len(result))
        
            test = "\n\r pdftk 2.0.2 \n\r"
            result = strings.TrimSpace(test)
            fmt.Printf("Length of %q is %d\n", test, len(test))
            fmt.Printf("Length of %q is %d\n\n", result, len(result))
        
            test = "\n\r\n\r pdftk 2.0.2 \n\r\n\r"
            result = strings.TrimSpace(test)
            fmt.Printf("Length of %q is %d\n", test, len(test))
            fmt.Printf("Length of %q is %d\n\n", result, len(result))
        
            test = "\r pdftk 2.0.2 \r"
            result = strings.TrimSpace(test)
            fmt.Printf("Length of %q is %d\n", test, len(test))
            fmt.Printf("Length of %q is %d\n\n", result, len(result))   
        }
        

        你也可以在Go lang playground 找到这个。

        【讨论】:

          【解决方案7】:

          带有 JSON Unmarshall 的快速字符串 "GOTCHA",它将为字符串添加换行引号。

          示例:{"first_name":" I have whitespace "} 的字符串值将转换为"\" I have whitespace \""

          在修剪任何内容之前,您需要先删除多余的引号:

          playground example

          // ScrubString is a string that might contain whitespace that needs scrubbing.
          type ScrubString string
          
          // UnmarshalJSON scrubs out whitespace from a valid json string, if any.
          func (s *ScrubString) UnmarshalJSON(data []byte) error {
              ns := string(data)
              // Make sure we don't have a blank string of "\"\"".
              if len(ns) > 2 && ns[0] != '"' && ns[len(ns)] != '"' {
                  *s = ""
                  return nil
              }
              // Remove the added wrapping quotes.
              ns, err := strconv.Unquote(ns)
              if err != nil {
                  return err
              }
              // We can now trim the whitespace.
              *s = ScrubString(strings.TrimSpace(ns))
          
              return nil
          }
          

          【讨论】:

            【解决方案8】:

            我对性能感兴趣,所以我做了一个只修剪左边的比较 侧面:

            package main
            
            import (
               "strings"
               "testing"
            )
            
            var s = strings.Repeat("A", 63) + "B"
            
            func BenchmarkTrimLeftFunc(b *testing.B) {
               for n := 0; n < b.N; n++ {
                  _ = strings.TrimLeftFunc(s, func(r rune) bool {
                     return r == 'A'
                  })
               }
            }
            
            func BenchmarkIndexFunc(b *testing.B) {
               for n := 0; n < b.N; n++ {
                  i := strings.IndexFunc(s, func(r rune) bool {
                     return r != 'A'
                  })
                  _ = s[i]
               }
            }
            
            func BenchmarkTrimLeft(b *testing.B) {
               for n := 0; n < b.N; n++ {
                  _ = strings.TrimLeft(s, "A")
               }
            }
            

            TrimLeftFuncIndexFunc 相同,TrimLeft 更慢:

            BenchmarkTrimLeftFunc-12        10325200               116.0 ns/op
            BenchmarkIndexFunc-12           10344336               116.6 ns/op
            BenchmarkTrimLeft-12             6485059               183.6 ns/op
            

            【讨论】: