删除字符串中的所有空格 [英] Strip all whitespace from a string

查看:51
本文介绍了删除字符串中的所有空格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Go中从任意字符串中剥离所有空格的最快方法是什么.

What is the fastest way to strip all whitespace from some arbitrary string in Go.

我正在从字符串包中链接两个函数:

I am chaining two function from the string package:

response = strings.Join(strings.Fields(response),"")

有人有更好的方法吗?

推荐答案

以下是一些用于从字符串中剥离所有空白字符的方法的基准:(

Here is some benchmarks on a few different methods for stripping all whitespace characters from a string: (source data):


BenchmarkSpaceMap-8                     2000       1100084 ns/op      221187 B/op          2 allocs/op
BenchmarkSpaceFieldsJoin-8              1000       2235073 ns/op     2299520 B/op         20 allocs/op
BenchmarkSpaceStringsBuilder-8          2000        932298 ns/op      122880 B/op          1 allocs/op

  • SpaceMap:使用 strings.Map ;遇到更多的非空白字符,逐渐增加分配的空间量
  • SpaceFieldsJoin: strings.Fields strings.Builder ;执行一次分配,但是如果源字符串主要是空格,则可能会总体上概括.
    • SpaceMap: uses strings.Map; gradually increases the amount of allocated space as more non-whitespace characters are encountered
    • SpaceFieldsJoin: strings.Fields and strings.Join; generates a lot of intermediate data
    • SpaceStringsBuilder uses strings.Builder; performs a single allocation, but may grossly overallocate if the source string is mainly whitespace.
    • package main_test
      
      import (
          "strings"
          "unicode"
          "testing"
      )
      
      func SpaceMap(str string) string {
          return strings.Map(func(r rune) rune {
              if unicode.IsSpace(r) {
                  return -1
              }
              return r
          }, str)
      }
      
      func SpaceFieldsJoin(str string) string {
          return strings.Join(strings.Fields(str), "")
      }
      
      func SpaceStringsBuilder(str string) string {
          var b strings.Builder
          b.Grow(len(str))
          for _, ch := range str {
              if !unicode.IsSpace(ch) {
                  b.WriteRune(ch)
              }
          }
          return b.String()
      }
      
      func BenchmarkSpaceMap(b *testing.B) {
          for n := 0; n < b.N; n++ {
              SpaceMap(data)
          }
      }
      
      func BenchmarkSpaceFieldsJoin(b *testing.B) {
          for n := 0; n < b.N; n++ {
              SpaceFieldsJoin(data)
          }
      }
      
      func BenchmarkSpaceStringsBuilder(b *testing.B) {
          for n := 0; n < b.N; n++ {
              SpaceStringsBuilder(data)
          }
      }
      

      这篇关于删除字符串中的所有空格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆