在Go中从某个任意字符串中剥离所有空格的最快方法是什么。
我从字符串包中链接了两个函数:
response = strings.Join(strings.Fields(response),"")
有人有更好的方法吗?
以下是一些用于从字符串中剥离所有空格字符的不同方法的基准:(源数据):
BenchmarkSpaceMap-8 2000 1100084 ns / op 221187 B / op 2分配/ 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.Join
SpaceStringsBuilder用途strings.Builder; 执行一次分配,但是如果源字符串主要是空格,则可能会总体上分配。
SpaceStringsBuilder
strings.Builder
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) } }