Golang有关字符串的API

本文详细介绍了Golang中字符串的创建、获取长度(包括len、string.Count和utf8.CountRuneInString函数)、分割(strings.Split和strings.Fields)、数字转换、遍历、大小写转换以及与切片的相互转换等操作。特别强调了使用len函数获取中文字符串长度的局限性,推荐使用utf8.CountRuneInString函数确保准确计数。
摘要由CSDN通过智能技术生成

字符串的创建

str := "HelloWorld"

 

获取字符串长度

通过内置len函数获取字符串长度

str := "cooper"
fmt.Printf("字符串的长度是%d\n", len(str))

输出:字符串的长度是6

需要注意的是,内置len函数用在字符串上其实是获取了字符串占用的字节数,对于英文字符来说一个字符占一个字节,因此英文字符串可以使用内置len函数获取长度。到那时对于中文字符来说,就不能使用len函数获取字符串长度了,因为一个中文字符不只是占用一个字节。保险起见,建议大家使用下面两种方法获取字符串长度。 

通过string包的Count函数获取字符串长度

这个函数原本的用途是获取第二个字符串在第一个字符串中出现的(非重叠)次数的。用在空字符串上可以获得两个字符之间间隙的个数,间隙的个数+1就是字符串的长度。

str := "cooper"
fmt.Printf("字符串的长度是%d\n", strings.Count(str, "") + 1)

输出:字符串的长度是6 

通过utf8包的CountRuneInString函数获取字符串长度

utf8包的路径是$GOROOT/src/unicode/utf8

str := "Cooper"
fmt.Printf("字符串的长度是%d\n", uft8.CountRuneInString(str))

输出:字符串的长度是6

 

字符串分割

通过strings.Split()函数分割字符串

strings.Split(str, sep)函数的第一个参数是待分割的字符串,第二个参数是分隔符(类型也是字符串)。

str := "hello world"
slice := strings.Split(str, " ")
fmt.Println(slice)

输出:[hello world] 

通过strings.Fields()函数分割字符串

strings.Fields(str)函数默认以空格作为分隔符进行分割,并返回字符串切片。因此strings.Split(str, " ")跟strings.Fields(str)的效果是一样的。

str := "hello world"
slice := strings.Fields(str)
fmt.Println(slice)

输出:[hello world]

 

字符串与数字之间的相互转换

字符串转float

// 字符串转为float32
fnum, err := strconv.ParseFloat(str, 32)
// 字符串转为float64
fnum, err := strconv.ParseFloat(str, 64)

下面是一个转换成功的例子和一个转换失败的例子:

// conv.go
package main

import (
    "fmt"
    "strconv"
)

func main() {
    str1 := "123.45"
    if fnum1, err := strconv.ParseFloat(str1, 64); err == nil {
        fmt.Printf("通过转换得到%f\n", fnum1)
    } else {
        fmt.Println(err)
    }
    str2 := "123..45"
    if fnum2, err := strconv.ParseFloat(str2, 64); err == nil {
        fmt.Printf("通过转换得到%f\n", fnum2)
    } else {
        fmt.Println(err)
    }
}

字符串转int

val, err := strconv.Atoi(str)

如果字符串不能转为int,则err != nil。

int转字符串

str := strong.Itoa(num)

 

字符串遍历

str := "coopersong"
for i, c := range str {
    fmt.Printf("第%d个字符是%c\n", i, c)
}

需要注意的是,上面的i是字节在整个字符串中的位置,因此由于字符编码的原因,在遍历中文字符串时会出现i值的跳变。

 

字符串大小写转换

小写转大写

str := strings.ToUpper(originalStr)

大写转小写

str := strings.ToLower(originalStr)

 

字符串与切片之间的转换

字符串转切片

字符串转字符切片

slice := []byte(str)

字符串转字节切片

slice := []rune(str)

通过下面这个程序可以观察到转换成以上两种切片的区别:

package main

import (
    "fmt"
)

func main() {
    str := "大家好"
    // 转换成字节切片
    slice1 := []byte(str)
    for i, c := range slice1 {
        fmt.Printf("第%d个字符是%c\n", i, c)
    }
    fmt.Println()
    // 转换成字符切片
    slice2 := []rune(str)
    for i, c := range slice2 {
        fmt.Printf("第%d个字符是%c\n", i, c)
    }
}

运行结果: 

 

切片转字符串

str := string(slice)

字符串与切片相互转换的意义 

Go语言不像其他语言那样,字符串本身是不能被修改的,不能通过str[0] = 'a'这样的语句修改字符串str的第一个字符。但是切片的元素是可以被修改的,因此如果想要修改字符串某个位置上的字符,可以先将其转换成切片,修改完再转换成字符串。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值