[Go]新手入门:字符串string介绍

Posted 凌星An

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Go]新手入门:字符串string介绍相关的知识,希望对你有一定的参考价值。

介绍

字符串string在Go中属于内置类型,
其介绍如下:

string is the set of all strings of 8-bit bytes, conventionally but not necessarily representing UTF-8-encoded text. A string may be empty, but not nil. Values of string type are immutable.
string 是所有 8 位字节的字符串的集合,通常是UTF-8 编码的文本 但也有别的编码形式(eg:ASCII) 。一个字符串可能是空的,但不是nil 。字符串类型的值是不可变的。

通常情况下,编程语言都支持 “” (双引号括起来)的字符串,当然Go语言也支持这种形式
eg:

//声明一个string类型的变量str,其值为hello gopher
var str string = "hello gopher"
//打印变量str
fmt.Println(str)
//其结果为
//hello gopher

在这种形式下,倘若包含转义字符(eg: \\n 会实现换行的效果)
eg:

var str string = "hello\\ngopher"
fmt.Println(str)
/*
其结果为
hello
gopher
*/

Go语言还支持另一种形式的字符串`` (反引号括起来的字符串 即Esc下面那个按键)
这种形式的字符串与上一种最大的区别在于 对于转义字符的处理
倘若这种形式的字符串含有转义字符,则原样输出
eg:

var str string = `hello\\ngopher`
fmt.Println(str)
/*
hello\\ngopher
*/

除此之外,两种形式没有任何其他区别.

操作符

访问字符串中的单个字符

字符串可以通过[下标] 的形式,获取对应下标的元素
注: Go中下标也是从0开始的
eg:

var str string = "hello gopher"
fmt.Printf("%c,%c\\n", str[0], str[1])
/*
结果如下:
h,e
*/

注:
可以通过这种方式进行访问,但是不可以通过此方式修改字符串
获取字符串中某个字节的地址属于非法行为,例如 &str[0]
eg:

var str string = "hello gopher"
str[0]='a'  //这是不被允许的

倘若需要修改字符串的内容,需要西安转换成切片的形式,在进行修改
eg:

    //声明一个string类型的变量str,其值为hello gopher
    var str string = "hello gopher"
    //将字符串转换成切片,赋给ch变量
	ch := []byte(str)
	//把下标为0的位置修改为字符H
	ch[0] = 'H'
	//把切片变量ch强转为string类型,输出
	fmt.Println(string(ch))

字符串比较

Go语言中可通过比较运算符(==、!=、<、<=、>=、>)在内存中按字节比较来实现字符串比较的.

    var str string = "hello gopher"
	var str1 string = "Hello gopher"
	fmt.Println(str == str1)
	fmt.Println(str > str1)
	fmt.Println(str[0], str1[0])
	/*
        false
        true
        104 72
        //ASCII编码,每个字符占用一个字节 h为104,H为72
        //故str>str1 为真
    */

字符串拼接

Go中可以使用+来实现两个字符串的拼接

eg:

var str string = "hello" + " " + "gopher"
fmt.Println(str)
/*
hello gopher
*/

计算字符串长度

使用内置函数len来计算字符串使用的字节数

func len(v Type)
String: int the number of bytes in v

eg:

str := "中国"
str1 := "China"
fmt.Println("len(str):", len(str), "len(str1)", len(str1))
/*
其结果为:
len(str): 6 len(str1) 5
*/

str字符串命名只有两个汉字,为什么其结果为6呢?

Go其实使用了uft-8编码,也兼容ASCII编码
在Go中,使用中文输入法输入的字符,每个占用3个字节(包含汉字,中文符号)
英文输入法输入的字符,每个占用1个字节(包含字母及符号)
而数字不论那种输入法,每个都占用一个字节

对于含有中文和英文的字符串来说,我们可以使用uft8包中的RuneCountInString函数来计算字符个数
eg:

	str := "中国China"
	fmt.Println("len(str):", utf8.RuneCountInString(str))
	/*
     其结果为:
     len(str): 7
     2个汉字,5个字母
    */

故:计算字符串长度
ASCII 字符串长度使用 len() 函数。
Unicode 字符串长度使用 utf8.RuneCountInString() 函数。

遍历字符串

ASCII 字符串遍历使用for循环
Unicode 字符串遍历使用for - range循环

eg:

str := "China"
	for i := 0; i < len(str); i++ 
		fmt.Printf("%d :%c\\n", i, str[i])
	

	str = "中国China"
	for k, v := range str 
		fmt.Printf("%d :%c\\n", k, v)
	
	/*
      其结果为:
0 :C
1 :h
2 :i
3 :n
4 :a
0 :中
3 :国
6 :C
7 :h
8 :i
9 :n
10 :a

   */

觉得不错,来个赞呗

以上是关于[Go]新手入门:字符串string介绍的主要内容,如果未能解决你的问题,请参考以下文章

Go语言入门到放弃-变量

Go 从入门到精通字符串,时间,流程控制,函数

go语音之进阶篇字符串操作常用函数介绍

GO 语言基础语法一 (快速入门 Go 语言)

Go基础之程序结构数据类型

Go基础之程序结构数据类型