与其他主要编程语⾔的差异
len
函数可以它所包含的 byte 数,而不是字符数。字符 “中” 在 Unicode 和 UTF-8 中的表示方式:
字符 | Unicode | UTF-8 | string/[]byte |
---|---|---|---|
中 | 0x4E2D | 0xE4B8AD | [0xE4, 0xB8, 0xAD] |
附上代码:
package string_test
import (
"fmt"
"testing"
)
func TestString(t *testing.T) {
var s string
fmt.Println(s) //initializes to default zero value ""
s = "hello"
fmt.Println(len(s))
//s[1] = '3' //string is an immutable byte slice
//s = "\xE4\xB8\xA5" //can store any binary data
s = "\xE4\xBA\xBB\xFF"
fmt.Println(s)
fmt.Println(len(s))
s = "中"
fmt.Println(len(s)) //is byte count
c := []rune(s)
fmt.Println(len(c))
//t.Log("rune size:", unsafe.Sizeof(c[0]))
fmt.Printf("中 unicode %x\n", c[0])
fmt.Printf("中 UTF8 %x\n", s)
}
func TestStringToRune(t *testing.T) {
s := "中华人民共和国"
for _, c := range s {
fmt.Printf("%c %x\n", c, c)
}
}
Go语言中处理字符串的重要包:strings
和 strconv
。
以下是一些这些包中比较常用的函数:
strings.Contains(s, substr)
: 检查字符串 s
是否包含子串 substr
。如果包含,返回 true
;否则返回 false
。strings.Count(s, substr)
: 返回子串 substr
在字符串 s
中出现的次数。strings.Index(s, substr)
: 返回子串 substr
在字符串 s
中第一次出现的索引,如果未找到则返回-1。strings.LastIndex(s, substr)
: 返回子串 substr
在字符串 s
中最后一次出现的索引,如果未找到则返回-1。strings.Replace(s, old, new, n)
: 将字符串 s
中的所有 old
子串替换为 new
子串,最多替换 n
次。strings.ToLower(s)
: 将字符串 s
中的所有字符转换为小写。strings.ToUpper(s)
: 将字符串 s
中的所有字符转换为大写。strings.Split(s, sep)
: 将字符串 s
根据分隔符 sep
分割为一个字符串切片。strings.TrimSpace(s)
: 去除字符串 s
两端的空白字符(包括空格、制表符、换行符等)。strconv.Atoi(s)
: 将字符串 s
转换为对应的整数。如果转换失败,返回错误。strconv.Itoa(n)
: 将整数 n
转换为对应的字符串。strconv.FormatFloat(f, fmt, prec, bitSize)
: 将浮点数 f
格式化为指定格式的字符串,精度为 prec
,位数为 bitSize
。strconv.ParseFloat(s, bitSize)
: 将字符串 s
解析为指定位数的浮点数。strconv.Unquote(
s)
: 将字符串 s
解析为被引号包围的字符串,例如 ‘“hello”’。如果解析失败,返回错误。strconv.Quote(s)
: 将字符串 s
用双引号包围,例如 ‘“hello”’。以上只是这些包中函数的一部分,这两个包都有更多功能,用于处理各种字符串相关的问题。查阅Go的官方文档来了解更多详情。
下面提供一些函数的代码案例:
strings.Split 和 strings.Join
package main
import (
"strings"
"fmt"
)
func main() {
s := "A,B,C"
//使用 strings.Split 函数按照逗号分割这个字符串,将分割后的各个部分存储在 parts 切片中
parts := strings.Split(s, ",")
for _, part := range parts {
fmt.Println(part)
}
//使用 strings.Join 函数将 parts 中的元素用连字符连接起来
fmt.Println(strings.Join(parts, "-"))
s := strconv.Itoa(10)
fmt.Println("str" + s)
if i, err := strconv.Atoi("10"); err == nil {
fmt.Println(10 + i)
}
}
strconv.Itoa 和 strconv.Atoi
package main
import (
"strconv"
"fmt"
)
func main() {
//使用 strconv.Itoa 函数将整数10转换为对应的字符串。
s := strconv.Itoa(10)
fmt.Println("str" + s)
//使用 strconv.Atoi 函数尝试将字符串 "10" 转换为一个整数。如果转换成功(即没有错误发生),那么就会打印出 10 + i 的结果,其中 i 是 "10" 转换后的整数。
if i, err := strconv.Atoi("10"); err == nil {
fmt.Println(10 + i)
}
}
学习Go语言主要是多练,多找些代码段写写,不懂可以私聊咨询。
码字不易,如果该文章有用,请多多关注或者赞赏,谢谢!