字符串类型
- 字符串定义
- 字符转义
- 常见函数操作
- 1.len()函数使用
- 2.Split函数
- 3.Contains函数
- 4.HasPrefix和HasSuffix函数
- 5.Index和LastIndex函数
- 6.Join
- 补充
字符串定义
go语言中字符串类型默认是使用UTF-8进行编码的,属于原生类型,不同于java中的String类型(属于引用类型,定义字符串需要使用双引号 " " 进行包裹,不能使用 ’ ’ 进行包裹(字符)。go语言中字符串是不可变,定义了字符串之后,不能够对其进行修改。
例如:
// 定义字符串
s1 := "定义字符串1"
s2 := "定义字符串2"
// 定义字符
c := 'a's
字符转义
特殊字符需要使用 \ 来进行转义
转义符 | 含义 |
\r | 回车符号且返回首列 |
\n | 换行符号 |
\t | tab |
\’ | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
package main
import (
"fmt"
)
func main() {
s := "\"输出双引号\""
fmt.Printf("%s\n", s)
s1 := "\\输出反斜杠\\"
fmt.Printf("%s\n", s1)
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/leetcode/main.go"
"输出双引号"
\输出反斜杠\
常见函数操作
1.len()函数使用
len函数可以计算字符串的字节长度(一般来说都是英文,所以就是求长度),需要注意的是一个中文字符的字节长度为3
package main
import (
"fmt"
)
func main() {
s1 := "abc"
// 计算字符串的字节长度
len1 := len(s1)
fmt.Printf("s1的长度为: %v\n", len1)
// 一个中文汉字的字节长度为3
s2 := "你好吗"
len2 := len(s2)
fmt.Printf("s2的长度为: %v\n", len2)
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/leetcode/main.go"
s1的长度为: 3
s2的长度为: 9
2.Split函数
package main
import (
"fmt"
"strings"
)
func main() {
s1 := "a,b,c,d,e,f,g"
ret := strings.Split(s1, ",")
// 返回值是一个string[],即字符串数组
fmt.Printf("%T\n", ret)
fmt.Println(ret)
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/leetcode/main.go"
[]string
[a b c d e f g]
3.Contains函数
判断字符串中是否包含某个字符串
package main
import (
"fmt"
"strings"
)
func main() {
s1 := "a,b,c,d,e,f,g"
fmt.Println(strings.Contains(s1, "a,b,c"))
}
4.HasPrefix和HasSuffix函数
判断字符串是否是指定前后缀
package main
import (
"fmt"
"strings"
)
func main() {
s1 := "a,b,c,d,e,f,g"
fmt.Println(strings.HasPrefix(s1, "a,b,c"))
fmt.Println(strings.HasSuffix(s1, "e,f,g"))
}
5.Index和LastIndex函数
从前或从后判断子字符串的下标位置(下标从0开始)
package main
import (
"fmt"
"strings"
)
func main() {
s1 := "a,b,c,d,a,b,c"
fmt.Println(strings.Index(s1, "a,b,c"))
fmt.Println(strings.LastIndex(s1, "a,b,c"))
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/leetcode/main.go"
0
8
6.Join
字符串数组的所有字符串进行拼接,同时每个字符串之间插入指定的字符
package main
import (
"fmt"
"strings"
)
func main() {
s := []string{"a", "b", "c"}
fmt.Printf("%T\n", s)
fmt.Println(strings.Join(s, ","))
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/leetcode/main.go"
[]string
a,b,c
补充
经自己不完全自测:无论是汉字还是英文都是使用int32类型进行存储的,但是占用的字节数不同,英文占用了1个字节,汉字占用了3个字节(汉字和英文在字符串中存储方式是不同的),因此不能够使用len函数加for循环对汉字字符串进行输出,否则会乱码。
package main
import (
"fmt"
)
func main() {
c1 := '红'
c2 := 'a'
fmt.Printf("%T, %T\n", c1, c2)
s1 := "红色球"
s2 := "abc"
fmt.Printf("s1----------- %d \n", len(s1))
for _, c := range s1 {
fmt.Printf("%c %T\n", c, c)
}
fmt.Printf("s2----------- %d \n", len(s2))
for _, c := range s2 {
fmt.Printf("%c %T\n", c, c)
}
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/leetcode/main.go"
int32, int32
s1----------- 9
红 int32
色 int32
球 int32
s2----------- 3
a int32
b int32
c int32
汉字乱码
package main
import (
"fmt"
)
func main() {
s1 := "红色球"
for i := 0; i < len(s1); i++ {
fmt.Printf("%c\n", s1[i])
}
}
[Running] go run "/Users/lijinlong/local/go/GoProjects/leetcode/main.go"
ç
º
¢
è
‰
²
ç