在Go语言中,从任意字符串中去掉所有空格的最快方法是什么?我从字符串包中链接了两个函数:
response = strings.Join(strings.Fields(response),"")
有人有更好的方法来做到这一点吗?
t40tm48m1#
我发现最简单的方法是使用字符串。ReplaceAll如下所示:
randomString := " hello this is a test" fmt.Println(strings.ReplaceAll(randomString, " ", "")) >hellothisisatest
Playground
mm9b1k5b2#
下面是一些关于从字符串中剥离所有空格字符的几种不同方法的基准:(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
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) } }
eeq64g8w3#
来自rosettacode.org:你可以找到这样的函数:
func stripChars(str, chr string) string { return strings.Map(func(r rune) rune { if strings.IndexRune(chr, r) < 0 { return r } return -1 }, str) }
因此,只需在此处将chr替换为" ",就足以完成任务并删除空格。要注意还有其他类型的由unicode定义的空格(如换行符、nbsp、...),您可能还希望摆脱这些空格(特别是如果您正在处理您实际上无法控制的外部数据)这将以这种方式完成:
chr
" "
func stripSpaces(str string) string { return strings.Map(func(r rune) rune { if unicode.IsSpace(r) { // if the character is a space, drop it return -1 } // else keep it in the string return r }, str) }
然后简单地应用到你的字符串。希望它能起作用,没有测试。
btqmn9zl4#
我想这是因为几年前有人问过这个问题:
strings.TrimSpace(moo)
TrimSpace返回字符串s的一个片段,其中删除了所有前导和尾随白色,如Unicode所定义。参见https://pkg.go.dev/strings#TrimSpace
4条答案
按热度按时间t40tm48m1#
我发现最简单的方法是使用字符串。ReplaceAll如下所示:
Playground
mm9b1k5b2#
下面是一些关于从字符串中剥离所有空格字符的几种不同方法的基准:(source data):
SpaceMap
:使用strings.Map
;当遇到更多的非空白字符时,会逐渐增加分配的空间量SpaceFieldsJoin
:strings.Fields
和strings.Join
;生成大量中间数据SpaceStringsBuilder
使用strings.Builder
;执行单个分配,但如果源字符串主要是空白,则可能会过度分配。eeq64g8w3#
来自rosettacode.org:
你可以找到这样的函数:
因此,只需在此处将
chr
替换为" "
,就足以完成任务并删除空格。要注意还有其他类型的由unicode定义的空格(如换行符、nbsp、...),您可能还希望摆脱这些空格(特别是如果您正在处理您实际上无法控制的外部数据)
这将以这种方式完成:
然后简单地应用到你的字符串。希望它能起作用,没有测试。
btqmn9zl4#
我想这是因为几年前有人问过这个问题:
TrimSpace返回字符串s的一个片段,其中删除了所有前导和尾随白色,如Unicode所定义。
参见https://pkg.go.dev/strings#TrimSpace