golang 的 strings 包的 Trim 的用法介绍

本文介绍了Go语言中strings.Trim函数的基本用法及实例代码。通过不同cutset参数的设置,展示如何去除字符串两端指定的字符。理解Trim函数有助于更好地进行字符串处理。

函数声明:

func Trim(s string, cutset string) string

官方描述:

返回将 s 前后端所有 cutset 包含的 utf-8 码值都去掉的字符串。

示例代码:

package main

import (
    "fmt"
    "strings"
 _  "test/subpac"
)

func main(){
    fmt.Println("[ !!! Achtung! Achtung! !!! ]:[]:[", strings.Trim(" !!! Achtung! Achtung! !!! ", "") ,"\b]")
    fmt.Println("[ !!! Achtung! Achtung! !!! ]:[ ]:[", strings.Trim(" !!! Achtung! Achtung! !!! ", " ") ,"\b]")
    fmt.Println("[ !!! Achtung! Achtung! !!! ]:[!]:[", strings.Trim(" !!! Achtung! Achtung! !!! ", "!") , "\b]")
    fmt.Println("[ !!! Achtung! Achtung! !!! ]:[! ]:[", strings.Trim(" !!! Achtung! Achtung! !!! ", "! "), "\b]" )
}

输出结果:

[ !!! Achtung! Achtung! !!! ]:[]:[  !!! Achtung! Achtung! !!! ]
[ !!! Achtung! Achtung! !!! ]:[ ]:[ !!! Achtung! Achtung! !!!]
[ !!! Achtung! Achtung! !!! ]:[!]:[  !!! Achtung! Achtung! !!! ]
[ !!! Achtung! Achtung! !!! ]:[! ]:[ Achtung! Achtung]

第一行 cutset 为空(不是空格):因此输出原字符串。
第二行 cutset 为 ” “(空格):因此串首尾的两个空格字符被删除了。
第三行 cutset 为 “!” :收尾未匹配到该 cutset,因此输出原字符串。
第四行 cutset 为 “! “:首先匹配到空格,串首尾空格字符被删除,然后匹配到 “!”,继续删除首尾的各三个 “!”,于是得到该结果串。

注:输出结果多余的空格是因为 Println 在输出多个串时会在串之间添加空格。如下:

fmt.Println("123", "456", "789")

输出:

123 456 789
<think>我们参考了用户提供的引用内容,其中引用[1]提到了strconv用于string和int转换,引用[3]提到了strings中的Map函数。用户询问的是“string”,但在Go语言中,并没有一个名为“string”的,而是有一个名为“strings”的标准,主要用于处理字符串。因此,我们推断用户可能指的是“strings。 根据引用[3]的描述,strings中有一个Map函数。此外,strings还提供了大量用于处理字符串的函数,如字符串比较、替换、分割、连接等。 因此,我们将围绕strings进行介绍括其常用函数、使用方法和示例。 另外,引用[5]提到了String()方法,虽然它与strings无关,但也是关于字符串表示的内容,我们可以在需要时提及,但用户明确询问string(即strings),所以重点放在strings上。 下面,我们将介绍Go语言标准库中的strings。 </think>### Golang `strings` 详解 `strings` 是 Go 标准库中用于操作字符串的核心,提供丰富的字符串处理函数。以下是常用功能分类说明及示例: --- #### 1. **字符串检测与比较** - **`Contains(s, substr string) bool`**:检查子串是否存在 ```go fmt.Println(strings.Contains("hello world", "world")) // true ``` - **`EqualFold(s, t string) bool`**:忽略大小写比较 ```go fmt.Println(strings.EqualFold("Go", "go")) // true ``` - **`HasPrefix(s, prefix string) bool`**:检查前缀 ```go fmt.Println(strings.HasPrefix("gopher", "go")) // true ``` --- #### 2. **字符串分割与连接** - **`Split(s, sep string) []string`**:按分隔符分割 ```go parts := strings.Split("a,b,c", ",") // ["a", "b", "c"] ``` - **`Join(elems []string, sep string) string`**:连接字符串切片 ```go s := strings.Join([]string{"Go", "Lang"}, "-") // "Go-Lang" ``` - **`Fields(s string) []string`**:按空格分割(支持多空格) ```go words := strings.Fields("hello world") // ["hello", "world"] ``` --- #### 3. **字符串转换与处理** - **`ToUpper(s string) string` / `ToLower(s string) string`**:大小写转换 ```go fmt.Println(strings.ToUpper("Go")) // "GO" ``` - **`Trim(s, cutset string) string`**:去除首尾指定字符 ```go fmt.Println(strings.Trim("!!Hello!!", "!")) // "Hello" ``` - **`Replace(s, old, new string, n int) string`**:替换子串 ```go s := strings.Replace("oink oink", "k", "ky", 2) // "oinky oinky" ``` --- #### 4. **高级处理函数** - **`Map(mapping func(rune) rune, s string) string`**:字符映射处理 ```go rot13 := func(r rune) rune { switch { case r >= 'A' && r <= 'Z': return 'A' + (r-'A'+13)%26 case r >= 'a' && r <= 'z': return 'a' + (r-'a'+13)%26 } return r } fmt.Println(strings.Map(rot13, "Golang")) // "Tbynat" [^3] ``` - **`Builder` 类型**:高效构建字符串(避免内存复制) ```go var b strings.Builder b.WriteString("Hello") b.WriteByte(' ') b.WriteString("World") fmt.Println(b.String()) // "Hello World" ``` --- #### 5. **字符串搜索** - **`Index(s, substr string) int`**:查找子串位置 ```go pos := strings.Index("chicken", "ken") // 4 ``` - **`Count(s, substr string) int`**:统计子串出现次数 ```go n := strings.Count("cheese", "e") // 3 ``` --- ### 关键特性总结 1. **无状态设计**:所有函数均为纯函数,不修改原字符串。 2. **UTF-8 支持**:正确处理 Unicode 字符(如 `rune` 处理)。 3. **高效性**:底层使用 `[]byte` 操作,避免不必要的内存分配。 4. **链式调用**:支持组合操作(如 `TrimSpace(ToLower(s))`)。 > 示例完整代码需导入: > ```go > import ( > "fmt" > "strings" > ) > ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值