跳转到主要内容

介绍


Go 的字符串包有几个函数可用于处理字符串数据类型。这些函数让我们可以轻松地修改和操作字符串。我们可以将函数视为我们对代码元素执行的操作。内置函数是那些在 Go 编程语言中定义并且可供我们随时使用的函数。

在本教程中,我们将回顾几个可用于在 Go 中处理字符串的不同函数。

使字符串大写和小写


函数 strings.ToUpper 和 strings.ToLower 将返回一个字符串,其中原始字符串的所有字母都转换为大写或小写字母。因为字符串是不可变的数据类型,所以返回的字符串将是一个新字符串。字符串中的任何非字母字符都不会更改。

要将字符串“Sammy Shark”全部转换为大写,您可以使用 strings.ToUpper 函数:

ss := "Sammy Shark"
fmt.Println(strings.ToUpper(ss))

Output
SAMMY SHARK


要转换为小写:

fmt.Println(strings.ToLower(ss))

Output
sammy shark

由于您使用的是 strings 包,因此您首先需要将其导入程序中。要将字符串转换为大写和小写,整个程序如下:

package main

import (
    "fmt"
    "strings"
)

func main() {
    ss := "Sammy Shark"
    fmt.Println(strings.ToUpper(ss))
    fmt.Println(strings.ToLower(ss))
}

strings.ToUpper 和 strings.ToLower 函数通过使大小写始终保持一致,可以更轻松地评估和比较字符串。 例如,如果用户的姓名全小写,我们仍然可以通过检查全大写版本来确定他们的姓名是否在我们的数据库中。

字符串搜索函数


strings 包有许多函数可以帮助确定字符串是否包含特定的字符序列。

Function Use
strings.HasPrefix Searches the string from the beginning
strings.HasSuffix Searches the string from the end
strings.Contains Searches anywhere in the string
strings.Count Counts how many times the string appears

strings.HasPrefix 和 strings.HasSuffix 允许您检查字符串是否以特定字符集开头或结尾。

例如,要检查字符串“Sammy Shark”是否以 Sammy 开头并以 Shark 结尾:

ss := "Sammy Shark"
fmt.Println(strings.HasPrefix(ss, "Sammy"))
fmt.Println(strings.HasSuffix(ss, "Shark"))

Output
true
true


您将使用 strings.Contains 函数来检查“Sammy Shark”是否包含序列 Sh:

fmt.Println(strings.Contains(ss, "Sh"))

Output
true


最后,看看Sammy Shark这个短语中出现了多少次字母S:

fmt.Println(strings.Count(ss, "S"))

Output
2


注意:Go 中的所有字符串都区分大小写。这意味着 Sammy 与 sammy 不同。

使用小写字母 s 从 Sammy Shark 获取计数与使用大写字母 S 不同:

fmt.Println(strings.Count(ss, "s"))

Output
0


因为 S 与 s 不同,所以返回的计数将为 0。

当您想在程序中比较或搜索字符串时,字符串函数很有用。

确定字符串长度


内置函数 len() 返回字符串中的字符数。 当您需要强制最小或最大密码长度,或将较大的字符串截断以在特定限制内用作缩写时,此功能很有用。

为了演示这个功能,我们将找到一个句子长字符串的长度:

import (
    "fmt"
    "strings"
)

func main() {
        openSource := "Sammy contributes to open source."
        fmt.Println(len(openSource))
}

我们将变量 openSource 设置为等于字符串“Sammy 对开源做出贡献”。然后使用 len(openSource) 将该变量传递给 len() 函数。最后,我们将函数传递给 fmt.Println() 函数,以便我们可以在屏幕上看到程序的输出……

请记住,len() 函数将计算任何用双引号括起来的字符,包括字母、数字、空白字符和符号。

字符串操作函数


strings.Join、strings.Split 和 strings.ReplaceAll 函数是在 Go 中操作字符串的一些额外方法。

strings.Join 函数可用于将字符串切片组合成一个新的单个字符串。

要从字符串切片创建逗号分隔的字符串,我们将按以下方式使用此函数:

fmt.Println(strings.Join([]string{"sharks", "crustaceans", "plankton"}, ","))


Output
sharks,crustaceans,plankton


如果我们想在我们的新字符串中的字符串值之间添加一个逗号和一个空格,我们可以简单地用逗号后的空格重写我们的表达式:strings.Join([]string{"sharks", "crustaceans", "plankton" },“,”)。

就像我们可以将字符串连接在一起一样,我们也可以拆分字符串。为此,我们可以使用 strings.Split 函数并拆分空格:

balloon := "Sammy has a balloon."
s := strings.Split(balloon, " ")
fmt.Println(s)

Output
[Sammy has a balloon]


输出是一段字符串。由于使用了 strings.Println,因此很难通过查看来判断输出是什么。要查看它确实是一段字符串,请使用带有 %q 动词的 fmt.Printf 函数来引用字符串:

fmt.Printf("%q", s)

Output
["Sammy" "has" "a" "balloon."]


除了strings.Split 之外,另一个有用的函数是strings.Fields。不同之处在于 strings.Fields 将忽略所有空格,并且只会拆分字符串中的实际字段:

data := "  username password     email  date"
fields := strings.Fields(data)
fmt.Printf("%q", fields)

Output
["username" "password" "email" "date"]


strings.ReplaceAll 函数可以采用原始字符串并返回更新后的字符串并进行一些替换。

假设 Sammy 的气球丢失了。 由于 Sammy 不再有这个气球,我们将在新字符串中将子字符串“has”从原始字符串气球更改为“had”:

fmt.Println(strings.ReplaceAll(balloon, "has", "had"))


在括号内,首先是存储原始字符串的变量气球; 第二个子字符串“has”是我们要替换的,第三个子字符串“had”是我们要替换第二个子字符串的。 当我们将其合并到程序中时,我们的输出将如下所示:

Output
Sammy had a balloon.


使用字符串函数 strings.Join、strings.Split 和 strings.ReplaceAll 将为您提供更好的控制来在 Go 中操作字符串。

结论


本教程介绍了一些用于字符串数据类型的常见字符串包函数,您可以使用这些函数在 Go 程序中处理和操作字符串。

文章链接