为了账号安全,请及时绑定邮箱和手机立即绑定

从字符串中去除所有空格

从字符串中去除所有空格

Go
倚天杖 2021-11-01 16:00:21
从 Go 中的任意字符串中去除所有空格的最快方法是什么。我从 string 包中链接了两个函数:response = strings.Join(strings.Fields(response),"")任何人都有更好的方法来做到这一点?
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

以下是一些用于从字符串中去除所有空白字符的不同方法的基准测试:(源数据):


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)

    }

}


查看完整回答
反对 回复 2021-11-01
?
米脂

TA贡献1836条经验 获得超3个赞

我发现最简单的方法是使用strings.ReplaceAll像这样:


randomString := "  hello      this is a test"

fmt.Println(strings.ReplaceAll(randomString, " ", ""))


>hellothisisatest



查看完整回答
反对 回复 2021-11-01
  • 3 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信