Go 拼接字符串,在Go语言中,要拼接(合并)字符串,可将运算符+用于字符串变量。字符串是使用解释型字符串字面量还是原始字符串字面量创建的无关紧要。运算符+将它左边和右边的字符串合并成一个字符串,如下程序所示。
package main
import (
"fmt"
)
func main() {
s := "Oh sweet ignition" + " be my fuse"
fmt.Println(s)
}
执行结果:
还可使用复合赋值运算符+=
来拼接字符串,如下程序所示。这个运算符将它右边的字符串合并到左边的字符串中。例如,可在循环中反复这样做来生成字符串。
package main
import (
"fmt"
)
func main() {
s := "Can you hear me?"
s += "\nHear me screamin'?"
}
只能拼接类型为字符串的变量,如果将整数和字符串进行拼接将导致编译错误,如下程序所示。
package main
import (
"fmt"
)
func main() {
var i int = 1
var s string = " egg"
var breakfast string = i + s
fmt.Println(breakfast)
}
执行结果:
解读如下:
1.声明整数变量i并将其初始化为1。
2.声明字符串变量s并将其初始化为egg。
3.声明字符串变量breakfast并将拼接i和s的结果赋给它。
4.打印变量breakfast的值。
错误消息指出不能将整数和字符串进行拼接。那么如何拼接这些值呢?Go标准库提供了strconv
包,您可使用其中的方法Itoa来完成这种任务:它将整数转换为字符串,如下程序所示。
package main
import (
"fmt"
"strconv"
)
func main() {
var i int = 1
var s string = " egg"
intToString := strconv.Itoa(i)
var breakfast string = intToString + s
fmt.Println(breakfast)
}
运行这个示例将输出拼接得到的字符串。
使用缓冲区拼接字符串
对于简单而少量的拼接,使用运算符+和+=的效果虽然很好,但随着拼接操作次数的增加,这种做法的效率并不高。如果需要在循环中拼接字符串,则使用空的字节缓冲区来拼接的效率更高。在如下程序中,使用了一个运行500次的循环来生成字符串。这虽然可使用运算符+=
来完成,但使用缓冲区的速度要快得多。
package main
import (
"fmt"
"bytes"
)
func main() {
var buffer bytes.Buffer
for i := 0; i < 500; i++ {
buffer.WriteString("z")
}
fmt.Println(buffer.String())
}
解读如下:
1.创建一个空的字节缓冲区,并将其赋给变量buffer。
2.一个运行500次的循环,每次循环都将字符串”z”写入缓冲区。
3.循环结束后,对缓冲区调用函数String()
以字符串的方式输出结果。
执行结果:
理解字符串是什么
要理解字符串是什么,必须明白计算机是如何显示和存储字符的。计算机将数据解读为数字,另外,虽然您根本看不到,但计算机实际上是将字符存储为数字的。
历史上有很多编码标准,最后大家就如何将字符映射到数字达成了一致。ASCII(美国信息交换标准码)曾经是最重要的编码标准,它就如何使用数字来表示英语字母表中的字符进行了标准化。
ASCII编码标准定义了如何使用7位的整数(通俗地说是数字)来表示128个字符。下表列出了ASCII字符集中的一些字符,如果您看不懂,也不用担心,只要知道数字映射到字符就可以了。
虽然ASCII在英语字符标准化的道路上迈出了重要的一步,但它不包含其他任何语言的字符集。简而言之,它支持使用英语说“hello”,但不支持使用中文说“您好”。
鉴于此,Unicode编码方案于1987年应运而生,它支持全球各地的大多数字符集。最新的版本支持128000个字符,涵盖135种或现代或古老的语言。更重要的是,Unicode涵盖了ASCII标准,其开头的128个字符就是ASCII字符。
很多字符编码方案都实现了Unicode标准,其中最著名的是UTF-8。更巧的是,Go语言的两位设计者Rob Pike和Ken Thompson也是UTF-8的联合设计者。可见,Go语言支持UTF-8和国际字符集,而Go源代码也是UTF-8的。
要更深入地理解字符串以及如何操作它们,必须首先知道Go语言中的字符串实际上是只读的字节切片。要获悉字符串包含多少个字节,可使用Go语言的内置函数len。
s := "hello"
fmt.Printf(len(s))
// outputs 5
西语字符(如a、b、c)通常映射到单个字节。单词hello为5个字节,由于Go字符串为字节切片,因此可输出字符串中特定位置的字节值。在下面的示例中,输出了字符串“hello”的第一个字节。
s := "hello"
fmt.Printf(s[0])
//outputs 104
您可能认为结果应为字符h,但由于通过索引访问字符串时,访问的是字节而不是字符,因此显示的是以十进制表示的字节值。下表列出了多个字母的十进制和二进制表示。
在Go语言中,可使用格式设置将十进制值转换为字符和二进制表示。
s := "hello"
fmt.Println("%q", s[0])
// outputs 'h'
fmt.Println("%b", s[0])
// outputs 1101000
即便不完全明白二进制、字节和字符字面量,也没有关系。请注意,在Go语言中,字符串实际上是字节切片,这意味着可以像操作其他字节切片一样操作字符串。
处理字符串
给字符串变量赋值后,就可使用标准库中的strings包提供的任何方法。这个包提供了一套完备的字符串处理函数,其文档非常详尽。下面介绍几个字符串处理示例,但要全面了解strings包提供的函数,建议您阅读文档。
1.将字符串转换为小写
函数ToLower
接受一个字符串,并将其中所有的大写字符都转换为小写,如下所示。
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.ToLower("VERY IMPORTANT MESSAGE"))
}
执行结果:
2.在字符串中查找子串
处理字符串时,另一个常见的任务是在字符串中查找子串。方法Index提供了这样的功能,它接受的第二个参数是要查找的子串。如果找到,就返回第一个子串的索引号;如果没有找到,就返回-1。别忘了,索引从0开始!如下所示。
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Index("surface", "face"))
fmt.Println(strings.Index("moon", "aer"))
}
执行结果:
3.删除字符串中的空格
strings包提供了很多将字符串的某些部分删除的方法。处理来自用户或数据源的输入时,一种常见的任务是确保开头和末尾没有空格。方法TrimSpace提供了这样的功能,如下程序所示。
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.TrimSpace("I love ww.coolcou.com tutorials"))
}
执行结果:
酷客教程相关文章:
评论前必须登录!
注册