本文介绍了删除字符串中的所有空格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在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.Join
;产生大量中间数据 -
SpaceStringsBuilder
使用strings.Builder
;执行一次分配,但是如果源字符串主要是空格,则可能会总体上概括. SpaceMap
: usesstrings.Map
; gradually increases the amount of allocated space as more non-whitespace characters are encounteredSpaceFieldsJoin
:strings.Fields
andstrings.Join
; generates a lot of intermediate dataSpaceStringsBuilder
usesstrings.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)
}
}
这篇关于删除字符串中的所有空格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!