Go中的Strings包简介

来自菜鸟教程
跳转至:导航、​搜索

介绍

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

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

使字符串大写和小写

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

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

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

要转换为小写:

fmt.Println(strings.ToLower(ss))
Outputsammy shark

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

package main

import (
    "fmt"
    "strings"
)

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

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

字符串搜索函数

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

功能 采用
strings.HasPrefix 从头开始搜索字符串
strings.HasSuffix 从末尾开始搜索字符串
strings.Contains 搜索字符串中的任何位置
strings.Count 计算字符串出现的次数

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

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

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

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

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

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

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

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


使用小写的 sSammy Shark 获取计数与使用大写的 S 不同:

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

因为 Ss 不同,返回的计数将是 0

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

确定字符串长度

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

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

import (
    "fmt"
    "strings"
)

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

我们将变量 openSource 设置为等于字符串 "Sammy contributes to open source.",然后使用 len(openSource) 将该变量传递给 len() 函数。 最后我们将函数传递给 fmt.Println() 函数,这样我们就可以在屏幕上看到程序的输出了……

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

字符串操作函数

strings.Joinstrings.Splitstrings.ReplaceAll 函数是在 Go 中操作字符串的一些附加方法。

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

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

fmt.Println(strings.Join([]string{"sharks", "crustaceans", "plankton"}, ","))
Outputsharks,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 将忽略所有空格,并且只会将实际的 fields 拆分为字符串:

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

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

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

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

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

OutputSammy had a balloon.

使用字符串函数 strings.Joinstrings.Splitstrings.ReplaceAll 将为您在 Go 中操作字符串提供更好的控制。

结论

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

您可以在 Understanding Data Types 中了解有关其他数据类型的更多信息,并在 An Introduction to Working with Strings 中阅读有关字符串的更多信息。