字符串基本是每个语言里都有的数据类型,这里来记录下go语言里对字符串的操作。

一、字符串的定义与字符串拼接

package main

import "fmt"

var str1 = "Hello"        // 定义字符串类型变量
var str2 = `            // 定义多行的字符串类型变量
第一行
第二行
`

func main() {
	str3 := "World"      // 在函数里定义字符串类型变量
	fmt.Println(str1 + " " + str3)        // 字符串拼接方式一:用+拼接
	fmt.Printf("%s %s", str1, str3)     // 字符串拼接方式二:格式化拼接
	fmt.Println(str2)                  // 打印多行字符串变量
}

  

二、获取字符串长度

fmt.Println(len("This is String"))

  

三、strings模块对字符串的操作

strings包相关文档地址:https://go-zh.org/pkg/strings/

3.1、字符串切割

fmt.Println(strings.Split("this is a string", " "))   // 对字符串进行分割操作,以空格为分隔符

fmt.Printf("%T\n", strings.Split("this is a string", " "))      // 打印切割后得到的字符串类型,结果为:[]string(字符串切片类型)

  

3.2、判断是否包含

fmt.Println(strings.Contains("how do you do", "do"))     // 判断字符串是否包含字符串"do",包含则返回true,否则返回false

  

3.3、字符串前后缀判断

fmt.Println(strings.HasPrefix("how do you do", "how"))   // 判断前缀,如果字符串是以how开头的则返回true,否则则返回false

fmt.Println(strings.HasSuffix("how do you do", "do"))    // 判断后缀,如果字符串是以do结尾的则返回true,否则则返回false

  

3.4、判断字符串-子串第一次出现的位置和最后一次出现的位置

var s string = "how do you do"

fmt.Println(strings.Index(s, "do"))       // 判断变量s里子串do第一次出现的位置(打印下标)

fmt.Println(strings.LastIndex(s, "do"))   // 判断变量s里子串do最后出现的位置(打印下标)

  

3.5、join操作

s3 := []string{"how","do","you","do"}

fmt.Println(s3)       // 结果为:[how do you do]

fmt.Println(strings.Join(s3, "+"))    // 用加号给s3里的子串连接起来(默认以空格连接),结果为:how+do+you+do

  

3.6、字符串替换

s := "hehehe World"

fmt.Println(strings.Replace(s,"he","wo",1))      // strings.Replace(要操作的字符串,"需要替换的字符","替换成什么字符",替换几次(1:一次。0:不做替换。-1:全部替换))

  

3.7、字符串计数

fmt.Println(strings.Count(s,"he"))      // strings.Count(s,"he")  打印出字符串"he"在s字符串里出现的次数

  

3.8、字母转大写与转小写

fmt.Println(strings.ToUpper(s))        // 将s便量里的所有值变大写

fmt.Println(strings.ToLower(s))         // 将s便量里的所有值变小写

  

3.9、字符串重复

fmt.Println(strings.Repeat(s,3))        // strings.Repeat(s,3) 结果为:得到3次s变量的值

  

3.10、去掉字符串收尾的空格

s := " this is a string "
fmt.Println(strings.TrimSpace(s))        // 去掉变量s首尾的空格

  

3.11、去掉指定字符串

fmt.Println(strings.Trim("abbacbadeabcfacb","abc"))     // 从前面的字符串里的前后去掉后面匹配的字符串(结果为:deabcf)

fmt.Println(strings.TrimLeft("abbacbadeabcfacb","abc"))     // 从前面的字符串里去掉左侧的指定字符串

fmt.Println(strings.TrimRight("abbacbadeabcfacb","abc"))    // 从前面的字符串里去掉右侧的指定字符串

  

3.12、返回空格分割的字符串

fmt.Println(strings.Fields("this is a string"))       // 默认按照空格分隔,返回一个切片,结果为:[this is a string]

fmt.Println(strings.Split("this,is,a,string",","))    //  自定义分隔符(以逗号为分隔符),返回一个切片类型,结果为:[this is a string]

  

四、字符串切片

str := "Hello World"

fmt.Println(str[0:5])             // 根据下标对字符串切片(从下标0切割到下标为5的字符串,顾头不顾尾(下标是5的字符串不获取))

fmt.Println(str[6:])             // 从下标6的字符串开始切割到最后

  

五、字符串反转

字符串反转没有自带方法,下面我们自己实现一个字符串反转

package main

import (
    "fmt"
)

// 字符串反转,方法一
func reverse(str string) string {
    var result string  // 定义字符串类型变量
    strLen := len(str) // 判断字符串长度
    for i := 0; i < strLen; i++ {
        // 循环:从字符串的最大下标每次减一获取字符串的内容实现字符串反转
        result = result + fmt.Sprintf("%c", str[strLen-i-1])
    }
    // 返回结果
    return result
}

// 字符串反转,方法二
func reverse1(str string) string {
    var result []byte             // 定义数组
    tmp := []byte(str)            // 将传入的字符串转为数组
    strLen := len(str)            // 获取传入字符串的长度
    for i := 0; i < strLen; i++ { // 循环
        result = append(result, tmp[strLen-i-1]) // 根据下标从大到小的顺序往result数组里追加字符串数组的内容
    }
    return string(result) // 返回字符串类型的result变量
}

func main() {
    ret := reverse("Dreams")
    ret1 := reverse1("Dreams")
    fmt.Println(ret)        // 结果:smaerD
    fmt.Println(ret1)       // 结果:smaerD
}

  

六、strconv模块对字符串的操作

将整数转换为字符串与将字符串转为整型,strconv包相关文档地址:https://go-zh.org/pkg/strconv/

6.1、Atoi将字符串转换为整型

str := "1234"
retStr, err := strconv.Atoi(str)      // Atoi:将字符串转换为整型
if err != nil {
    fmt.Println(err)
}
fmt.Printf("Type:%T, data:%d\n", retStr, retStr)        // 结果:Type:int, data:1234

  

6.2、Itoa将整形转换为字符串

int := 3306
retInt := strconv.Itoa(int)       // Itoa:将整型转换为字符串
fmt.Printf("Type:%T, data:%s\n", retInt,retInt)      // 结果:Type:string, data:3306

  

6.3、ParseBool()

ret2, _ := strconv.ParseBool("1")     // ParseBool(string):返回字符串表示的bool值。它接受1、0、t、f、T、F、true、false、True、False、TRUE、FALSE;否则返回错误。
fmt.Println(ret2)     // 结果true

  

6.4、ParseInt()

ret1, _ := strconv.ParseInt("123", 10, 0)      // ParseInt(字符串, 进制(以几进制的形式展示,有效值:2-36),0、8、16、32、64 分别代表 int、int8、int16、int32、int64;)
fmt.Println(ret1)     // 结果:123

  

6.5、ParseUint()

u, err := strconv.ParseUint("2", 10, 64)     //ParseUint类似ParseInt但不接受正负号,用于无符号整型。

  

6.6、ParseFloat()

f, err := strconv.ParseFloat("3.1415", 64)

解析一个表示浮点数的字符串并返回其值。

如果s合乎语法规则,函数会返回最为接近s表示值的一个浮点数(使用IEEE754规范舍入)。

bitSize指定了期望的接收类型,32是float32(返回值可以不改变精确值的赋值给float32),64是float64;

返回值err是*NumErr类型的,语法有误的,err.Error=ErrSyntax;结果超出表示范围的,返回值f为±Inf,err.Error= ErrRange。