Go中字符串的遍历技巧:轻松操作文本 您所在的位置:网站首页 c语言如何遍历字符串 Go中字符串的遍历技巧:轻松操作文本

Go中字符串的遍历技巧:轻松操作文本

2024-01-08 16:37| 来源: 网络整理| 查看: 265

目录

方法一:使用for循环和索引

方法二:使用for循环和range关键字

方法三:使用rune遍历字符串

方法四:使用unicode/utf8包中的函数

方法五:使用strings.Map() 函数

结论

图片

更多关于Go的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

本文原文:Go中字符串的遍历技巧:轻松操作文本

在Go语言中,我们经常需要对字符串进行遍历和转换操作。在公众号CTO Plus前面的一篇文章中,我已经对Go的字符串进行了详细的讲解和介绍,具体可以翻阅查看《Go语言字符串操作大揭秘:高效处理文本》。本文我将介绍下Go语言中遍历字符串的几种常见方法,以及通过详细代码示例演示这些功能特性,分别为如下几种方式:

方式1:在Go语言中,字符串是不可变的字节序列,可以通过索引访问单个字符,所以可以使用for循环结合索引来进行字符串的遍历操作。

方式2:通过for range的方式对字符串进行遍历。

方式3:使用rune来遍历字符串。

方式4:使用unicode/utf8包中的函数遍历含有中文的字符串。

方式5:当我们需要对字符串进行遍历和转换操作时,Go语言中的strings.Map()函数是一个非常有用的工具。它可以对字符串中的每个字符进行操作,并返回一个新的字符串,我们将通过一个实际的示例来演示如何使用strings.Map()函数对字符串进行遍历和转换。

方法一:使用for循环和索引

可以使用for循环和索引来遍历字符串。例如:

url := "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q"

for i := 0; i < len(url); i++ {

      fmt.Printf("%c",url[i])

}

上面的代码使用for循环和索引i遍历字符串str。通过str[i]可以获取字符串中的单个字符,并使用%c格式化符号打印出来。

方法二:使用for循环和range关键字

可以使用for循环和range关键字来遍历字符串。range关键字会返回字符串的索引和对应的字符。for range 结构是Go语言特有的一种的迭代结构,在许多情况下都非常有用,for range 可以遍历数组、切片、字符串、map 及通道(channel),for range 语法上类似于其它语言中的 foreach 语句,例如:

url := "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q"

for index, char := range url {

     fmt.Printf("%v %c\n",index, char)

}

上面的代码使用for循环和range关键字遍历字符串str。通过range关键字可以同时获取字符串的索引和对应的字符,并打印出来。

for _, char := range url {      fmt.Printf("%c",char) }

在这个例子中,使用了一个匿名变量_来忽略索引。

需要要注意的是,char始终为集合中对应索引的值拷贝,因此它一般只具有只读性质,对它所做的任何修改都不会影响到集合中原有的值。

方法三:使用rune遍历字符串

一个字符串是 Unicode 编码的字符(或称之为 rune )集合,因此也可以用它来迭代字符串:

每个 rune 字符和索引在 for range 循环中是一一对应的,它能够自动根据 UTF-8 规则识别 Unicode 编码的字符。

下面这段代码展示了如何遍历字符串:

func runeRange() { url := "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q" fmt.Println("index int(rune) rune char bytes") for index, rune := range url { fmt.Printf("%-2d %d %U '%c' % X\n", index, rune, rune, rune, []byte(string(rune))) }}

输出结果

图片

更多关于Go的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

​                       

方法四:使用unicode/utf8包中的函数

如果需要按照Unicode字符遍历字符串,可以使用unicode/utf8包中的函数。例如:

在Go语言中,可以使用unicode/utf8包中的函数对字符串进行遍历操作。这个包提供了一些函数来处理UTF-8编码的字符串。

下面是一个使用unicode/utf8包中的函数对字符串进行遍历操作的实战案例:

package main import ( "fmt" "unicode/utf8") func rangeUnicode(){ str2 := "Chinese: 中文,微信公众号:CTO Plus" fmt.Printf("The length of str2 is: %d\n", len(str2)) //The length of str2 is: 44 // 使用range循环遍历字符串中的字符 for pos, char := range str2 { fmt.Printf("character %c starts at byte position %d\n", char, pos) } // 使用utf8.RuneCountInString()函数获取字符串中的字符数量 charCount := utf8.RuneCountInString(str2) fmt.Printf("字符数量: %d\n", charCount) // 字符数量: 26 for i := 0; i < len(str2); { r, size := utf8.DecodeRuneInString(str2[i:]) fmt.Printf("%c", r) i+=size } // Chinese: 中文,微信公众号:CTO Plus}

在上面的例子中,我们首先定义了一个UTF-8编码的字符串"Chinese: 中文,微信公众号:CTO Plus"。然后,我们使用utf8.RuneCountInString()函数获取字符串中的字符数量,并使用len()函数获取字符串的字节长度。这里要注意,字符串的字节长度和字符数量不一定相等,因为UTF-8编码下,一个字符可能占用多个字节。

接下来,我们使用utf8.DecodeRuneInString()函数逐个获取字符串中的字符,并使用fmt.Printf()函数打印每个字符。这个函数接受一个字符串参数和一个索引参数,返回该索引处的字符和字符的字节大小。我们使用一个循环来遍历字符串中的每个字符,并将索引增加字符的字节大小,以获取下一个字符。

最后,我们使用range循环遍历字符串中的字符。range循环会自动将字符串转换为UTF-8编码的字符序列,并逐个返回字符。我们使用fmt.Printf()函数打印每个字符。

这个实战案例展示了如何使用unicode/utf8包中的函数对字符串进行遍历操作,包括获取字符数量、逐个获取字符和使用range循环遍历字符。这些函数可以帮助我们更方便地处理UTF-8编码的字符串。

输出结果

图片

上面的代码使用unicode/utf8包中的函数遍历字符串str。通过range关键字可以获取字符串中的每个Unicode字符,并打印出来。

需要注意的是,字符串是以UTF-8编码存储的,一个字符可能占用多个字节。Unicode字符可能由多个字节组成,所以在遍历字符串时,每次迭代返回的是一个Unicode字符。

更多关于Go的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

 

方法五:使用strings.Map() 函数

在开发过程中,很多时候我们需要对一个字符串中的每一个字符都做相对应的处理,在Go语言中,提供了 strings.Map() 函数 实现了这样的功能。

strings.Map()函数用于对字符串中的每个字符应用一个函数,并返回处理后的字符串。这个函数接受一个映射函数作为参数,该映射函数接受一个字符作为输入,并返回一个字符作为输出。

我们先看下strings.Map()函数的源码

图片

函数释义:

参数1:mapping 对字符串中每一个字符的处理函数。

参数2:s  要处理的目标字符串(原字符串)。

返回值:返回处理后的字符串。

对字符串 s 中的每一个字符都做mapping 处理。mapping是一个匿名函数,接受一个rune类型的参数,返回的也是一个 rune 类型的参数。

下面是一个使用strings.Map()函数的实战案例:

代码示例1

package main import ( "fmt" "strings") func strMap(){ fmt.Println(information) // 公众号:CTO Plus,blog:https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q result := strings.Map(func(r rune) rune { if r == 'q' { return 'Q' } return r }, information) fmt.Println(result) // 公众号:CTO Plus,blog:https://mp.weixin.QQ.com/s/0yQGBPbOI6QxHQK17WxU8Q}

在上面的例子中,我们定义了一个匿名函数作为strings.Map()函数的参数。这个匿名函数接受一个字符作为输入,并根据字符的值进行映射。如果字符是字母"q",则将其替换为大写的字母"Q",否则保持原样。最后,strings.Map()函数会对字符串中的每个字符应用这个映射函数,并返回处理后的字符串。

同样的方法可以参考公众号CTO Plus文章《Go语言字符串操作大揭秘:高效处理文本》中的strings.FieldsFunc()、strings.IndexFunc()

代码示例2:rune与strins.Map的联合使用

遍历字符串,将字符串每一个字符后移一位

// 定义一个字符串类型var WEIXIN_URL = "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q" func strEncry(r rune) rune{ return r+1} func stringsOperator(){ // 字符串遍历 for key, val := range WEIXIN_URL { //代码中的变量 val,实际类型是 rune 类型,以十六进制打印出来就是字符的编码。 fmt.Printf("key:%d value:%c-%x\n", key, val, val) } //使用strings.Map()函数将一个字符串中的每个字符都往后移一位 strURL := WEIXIN_URL fmt.Println(strURL) // https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q mapStr := strings.Map(strEncry, strURL) fmt.Println(mapStr) //iuuqt;00nq/xfjyjo/rr/dpn0t01zrHCQcPJ7RyIrL28XyV9R}

我们定义了一个字符串类型的变量WEIXIN_URL,接着我们使用字符串的 strings.Map() 函数将字符串每一位字符使用 strEncry 函数进行处理,并使用 fmt.Println 打印最终的结果。

strEncry 函数实现了将字符的ASCII 码加一的功能,即字符往后移动一位,因此我们传入的字符串是 “https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q”,最终变成了 “iuuqt;00nq/xfjyjo/rr/dpn0t01zrHCQcPJ7RyIrL28XyV9R”。

更多关于Go的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

结论

本文介绍了Go语言中遍历字符串的几种常见方法。通过for循环和索引、for循环和range关键字、使用strings包和unicode/utf8包中的函数,可以方便地遍历字符串并处理其中的字符。

字符串遍历方法:1、使用“for range”语句遍历,语法“for key, value := range str {...}”;2、使用strings包的Map()函数来遍历,语法“trings.Map(func(rune), 原字符串)”,其中参数“func(rune)”是一个回调函数,用于对字符串中每一个字符进行处理。

通过掌握这些方法,可以更好地处理和操作字符串。

更多精彩,关注我公号,一起学习、成长

图片

推荐阅读:

开源项目 | 17款云原生安全相关的扫描和平台类开源工具

Go语言常量解密:恒定不变的值(const与iota)(附代码示例)深入了解Go语言的数据类型

使用strconv进行Go的 int、float、string类型相互转换:灵活转换数据类型

Go语言变量的生命周期与作用域

Go中字符串的遍历技巧:轻松操作文本

Go语言字符串操作大揭秘:高效处理文本

Go的流程控制(if、for、switch、goto)全面解析与刨坑

Go的多端开发环境与编译器的搭建详解(图文)

Go语言的高级特性,发展趋势,以及推荐最热门的开源项目



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有