- 1、func len(v Type) int
- 2、字符串遍历
- 3、func Atoi(s string) (i int, err error)
- 4、func Itoa(i int) string
- 5、字符串转 []byte
- 6、[]byte 转字符串
- 7、十进制转 2 、8 、16进制
- 8、查找字符串是否包含某个子串
- 9、统计一个字符串中有几个指定的子串
- 10、不区分大小写的字符串比较(==区分大小写)
- 11、返回子串在字符串第一次出现的index的值
- 12、返回子串在字符串最后一次出现的index的值
- 13、将指定的子串替换成另一个子串
- 14、按照指定字符进行字符串分割
- 15、字符串字母大小写转换
- 16、去掉字符串左右两边的空格
- 17、去掉字符串两边指定的字符
- 18、去掉字符串左边指定的字符
- 19、去掉字符串右边指定的字符
- 20、判断字符串是否已指定字符串开头
- 21、判断字符串是否已指定字符串结尾(后缀)
Golang标准文档库
1、func len(v Type) int
内建函数len返回 v 的长度,这取决于具体类型:
数组:v中元素的数量
数组指针:v中元素的数量(v为nil时panic)
切片、映射:v中元素的数量;若v为nil,len(v)即为零
字符串:v中*字节的数量, 汉字占用三个字节
通道:通道缓存中队列(未读取)元素的数量;若v为 nil,len(v)即为零
2、字符串遍历
处理含有中文的情况,汉字占3个字节
转成切片: str2 := []rune(str)
func main() {name := "xiao"name01 := "xiao肖"fmt.Println("name len=", len(name)) // name len= 4fmt.Println("name01 len=", len(name01)) // name len= 7 // 一个汉字占三个字节_name := []rune(name01) // str 转成 []rune 切片fmt.Printf("%T %v \n", _name, _name)for i := 0; i < len(name01); i++ {fmt.Printf("name01[%v] = %v \n", i, name01[i])}}[]int32 [120 105 97 111 32918] // []rune(name01) 按字符切片name01[0] = 120name01[1] = 105name01[2] = 97name01[3] = 111name01[4] = 232name01[5] = 130name01[6] = 150%c 该值对应的unicode码值// 修改之后name01 := "xiao肖"_name := []rune(name01) // str 转成 []rune 切片fmt.Printf("%T %v \n", _name, _name)for i := 0; i < len(_name); i++ {fmt.Printf("_name[%v] = %c \n", i, _name[i])}[]int32 [120 105 97 111 32918]_name[0] = x_name[1] = i_name[2] = a_name[3] = o_name[4] = 肖
3、func Atoi(s string) (i int, err error)
strconv包
Atoi是ParseInt(s, 10, 0)的简写。
字符串转数字
// 字符串转数字n, err := strconv.Atoi("123a")if err != nil {fmt.Println("转换错误", err)} else {fmt.Println("转化成功")fmt.Println("n = ", n, " err = ", err)}// 转换错误 strconv.Atoi: parsing "123a": invalid syntax
4、func Itoa(i int) string
strconv包
Itoa是FormatInt(i, 10) 的简写。
数字转字符串
// 整数转字符串str := strconv.Itoa(123)fmt.Printf("str 类型:%T, 值:%s", str, str)// str 类型:string, 值:123
5、字符串转 []byte
// 字符串转 []bytevar bytes = []byte("hello go")fmt.Printf("bytes类型: %T, 值: %v \n", bytes, bytes)// ascii// bytes类型: []uint8, 值: [104 101 108 108 111 32 103 111]
6、[]byte 转字符串
var str = string([]byte{97, 98, 99})fmt.Printf("str类型: %T, 值: %s", str, str)// ascii码对应的字符// str类型: string, 值: abc
7、十进制转 2 、8 、16进制
strconv包
func FormatInt(i int64, base int) string
返回i的base进制的字符串表示。base 必须在2到36之间,结果中会使用小写字母’a’到’z’表示大于10的数字。
var n1 = strconv.FormatInt(8, 2)fmt.Printf("n1类型: %T, 值: %v", n1, n1)// 十进制8对应的2进制的字符串 1000// n1类型: string, 值: 1000
8、查找字符串是否包含某个子串
strings包
func Contains(s, substr string) bool
判断字符串s是否包含子串substr。
// 查找字符串是否包含某个子串var isHasStr = strings.Contains("hello go", "go")fmt.Printf("isHasStr类型: %T, 值: %v \n", isHasStr, isHasStr)// isHasStr类型: bool, 值: true
9、统计一个字符串中有几个指定的子串
子串不重复出现的次数
strings包
func Count(s, sep string) int
返回字符串s中有几个不重复的sep子串。没有则返回0
var n2 = strings.Count("xiaoxiaoxiao", "xiao")fmt.Println("n2 = ", n2)// n2 = 3
10、不区分大小写的字符串比较(==区分大小写)
strings包
func EqualFold(s, t string) bool
判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。
var b2 = strings.EqualFold("abc", "ABC")fmt.Println("b2 = ", b2)var b3 = ("abc" == "ABC")fmt.Println("b3 = ", b3)// b2 = true// b3 = false
11、返回子串在字符串第一次出现的index的值
如果没有,则返回 -1 (也可以用来判断是否包含子串)
strings包
func Index(s, sep string) int
子串sep在字符串s中第一次出现的位置,不存在则返回-1。
按字节位置输出
var n3 = strings.Index("hello,go", "go")fmt.Println("n3 = ", n3)// n3 = 6var n3 = strings.Index("hello,你好", "好")fmt.Println("n3 = ", n3)// n3 = 9 // 一个汉字三个字节
12、返回子串在字符串最后一次出现的index的值
如果没有,则返回 -1 (也可以用来判断是否包含子串)
strings包
func LastIndex(s, sep string) int
子串sep在字符串s中最后一次出现的位置,不存在则返回-1。
var n4 = strings.LastIndex("hello,你好好", "好")fmt.Println("n4 = ", n4)// n4 = 12
13、将指定的子串替换成另一个子串
strings包
不改变原始字符串
func Replace(s, old, new string, n int) string
返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。
fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) // 替换前两个fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1)) // 替换所有// oinky oinky oink// moo moo moostr02 := "go go hello"str03 := strings.Replace(str02, "go", "北京", 2)fmt.Println("str03= ", str03)fmt.Println("str02= ", str02)// str03= 北京 北京 hello// str02= go go hello
14、按照指定字符进行字符串分割
将一个字符串拆成字符串数组(切片)
string包
func Split(s, sep string) []string
不会改变原始字符串
用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有片段组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。
var strArr = strings.Split("go,go,hello", ",")fmt.Printf("strArr类型: %T, 值: %v \n", strArr, strArr)for i := 0; i < len(strArr); i++ {fmt.Printf("第%v个,%v \n", i, strArr[i])}// strArr类型: []string, 值: [go go hello]第0个,go第1个,go第2个,hello
15、字符串字母大小写转换
strings包
不会改变原始字符串
func ToLower(s string) string
返回将所有字母都转为对应的小写版本的拷贝。
func ToUpper(s string) string
返回将所有字母都转为对应的大写版本的拷贝。
// 字符串大小写转化var tmp = "HELLO"var tmp01 = "abc"var str04 = strings.ToLower(tmp)fmt.Println("str04 = ", str04)fmt.Println("tmp = ", tmp)var str05 = strings.ToUpper(tmp01)fmt.Println("str05 = ", str05)fmt.Println("tmp01 = ", tmp01)str04 = hellotmp = HELLOstr05 = ABCtmp01 = abc
16、去掉字符串左右两边的空格
strings包
不会改变原始字符串
func TrimSpace(s string) string
返回将s前后端所有空白(unicode.IsSpace指定)都去掉的字符串。
%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示var str06 = " hello, 小伙子 "var newstr06 = strings.TrimSpace(str06)fmt.Printf("newstr06 = %q \n", newstr06)fmt.Printf("str06 = %q", str06)// newstr06 = "hello, 小伙子"// str06 = " hello, 小伙子 "
17、去掉字符串两边指定的字符
strings包
不改变原始字符串
func Trim(s string, cutset string) string
返回将s前后端所有cutset包含的utf-8码值都去掉的字符串。
fmt.Printf("[%q]", strings.Trim(" !!! Achtung! Achtung! !!! ", "! "))fmt.Printf("[%q]", strings.Trim(" !!! Achtung! Achtung! !!! ", " !"))// ["Achtung! Achtung"]// ["Achtung! Achtung"]
18、去掉字符串左边指定的字符
strings包
不改变原始字符串
func TrimLeft(s string, cutset string) string
返回将s前端所有cutset包含的utf-8码值都去掉的字符串。
var str07 = "xxxhello,golang"fmt.Printf("str07 = [%q]\n", strings.TrimLeft(str07, "x"))// str07 = ["hello,golang"]
19、去掉字符串右边指定的字符
strings包
不改变原始字符串
func TrimRight(s string, cutset string) string
返回将s后端所有cutset包含的utf-8码值都去掉的字符串。
var str08 = "xxxhello,golang"fmt.Printf("str08 = [%q]\n", strings.TrimRight(str08, "golang"))// str08 = ["xxxhello,"]
20、判断字符串是否已指定字符串开头
strings包
func HasPrefix(s, prefix string) bool
判断s是否有前缀字符串prefix。
// 判断字符串是否已指定字符串开头var b02 = strings.HasPrefix("hello,go", "he")fmt.Println("b02 = ", b02)b02 = true
21、判断字符串是否已指定字符串结尾(后缀)
strings包
func HasSuffix(s, suffix string) bool
判断s是否有后缀字符串suffix。
// 判断字符串是否已指定字符串结束var b03 = strings.HasSuffix("hello.go", ".go")fmt.Println("b03 = ", b03)b03 = true
