【一Go到底】第二十三天---字符串函数详解

205 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情

一、字符串常用函数

  1. 统计字符串长度 - len(str)
  2. 字符串遍历,同时处理字符串含有中文问题 - r:=[]rune(str)
  3. 字符串转整数 - n,err := strconv.Atol("123")
  4. 整数转字符串 - str = strconv.Itoa(12345)
  5. 字符串 转 []byte - var bytes = []byte("hello go")
  6. []byte 转字符串 - str = string([]byte{97,98,99})
  7. 10进制转 2,8,16 进制 - str = strconv.FormateInt(123,2) // 2换成8,16
  8. 查找子串是否在指定的字符串中 - strings.Contains("seafood","foo") // 返回 true
  9. 统计一个字符串有几个指定的字串 - strings.Count("cheese","e") // 返回3
  10. 不区分大小写的字符串比较(==是区分大小写) - fmt.Println(strings.EqualFold("abc", "Abc")) // true
  11. 返回子串在字符串第一次出现的index值,如果没有就返回 -1 - strings.Index("bbbabcd", "abc") // 3
  12. 返回子串在字符串最后一次 出现的index,如没有返回-1 : strings.Lastlndex("go golang", "go")

13.将指定的子串替换成另外一个子串: strings.Replace("go go hello", "go", "go语言", n) n可以指定你希望替换几个,如果n=-1表示全部替换

  1. 按照指定的某个字符,为分割标识,将一个字符串拆分成字符串组:strings.Split("hello,wrold,ok", ",")
  2. 将字符串的字母进行大小写的转换: strings.Tolower("Go") // go strings.ToUpper("Go") // GO
  3. 将字符串左右两边的空格去掉: strings.TrimSpace(" tn a lone gopher ntrn ")
  4. 将字符串左右两边指定的字符去掉: strings.Trim("! hello!", ”!") // ["hello"] //将左右两边!和""去掉
  5. 将字符串左边指定的字符去掉: strings.Trimleft ("! hello!"," !") // ["hello"] //将左边!和""去掉
  6. 将字符串右边指定的字符去掉: strings.TrimRight("! hello!", " !") // ["hello"] //将右边!和""去掉
  7. 判断字符串是否以指定的字符串开头: strings.HasPrefix("ftp://192.168.10.1", "ftp") // true
  8. 判断字符串是否以指定的字符串结束strings.HasSufix("NLT abc.jpg", "abc") //false

二、案例分析


package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// 字符串长度
	str := "Hello,世界"
	// 字符串长度 =  12,一个中文占3个UTF-8长度
	fmt.Println("字符串长度 = ", len(str))

	// 遍历 []rune
	str2 := "Welcome to 重庆"
	str_new := []rune(str2)
	for i := 0; i < len(str_new); i++ {
		fmt.Printf("字符= %c\n", str_new[i])
	}

	// 字符串转整数
	n, err := strconv.Atoi("123")
	if err != nil {
		fmt.Println("转换错误 ", err)
	} else {
		fmt.Println(n)
	}

	// 数字转字符串
	str_num := strconv.Itoa(123)
	fmt.Printf("str_num = %v, type = %T\n", str_num, str_num)

	// 字符串转 []byte

	var bytes = []byte("hello,Go")
	// 对应的数字是 字母的ascii编码
	fmt.Printf("bytes = %v\n", bytes)

	// []byte  转 字符串
	str_b := string([]byte{97, 98, 99})
	fmt.Printf("str_b = %v\n", str_b)

	// 十进制转换

	// 13对应二进制
	str_bin := strconv.FormatInt(13, 2)
	fmt.Println("13对应二进制 = ", str_bin)
	// 113对应十六进制
	str_hex := strconv.FormatInt(113, 16)
	fmt.Println("113对应二进制 = ", str_hex)

	// 查找子串是否在特定字符串中

	str_find := strings.Contains("seafood", "foo")
	fmt.Println("str_find 结果为 ", str_find)

	// 统计字符串中指定子串的数量

	num := strings.Count("abccddecccc", "c")
	fmt.Println("c的数量为 : ", num)

	// 区分字符串比较(不分大小写)
	str_eq := strings.EqualFold("abC", "ABC")
	// str_eq 结果  true
	fmt.Println("str_eq 结果 ", str_eq)

	// 返回子串第一次出现在字符串的index下标

	index := strings.Index("HellAbccEeee", "e")
	// Index =  1
	fmt.Println("Index = ", index)

	// 返回子串最后一次出现在字符串的index下标
	index = strings.LastIndex("HellAbccEeee", "e")
	// Index =  1
	fmt.Println("Index = ", index)

	// 替换子串

	str_source := "Abacadaeaf"
	// 替换不影响原本的字符串
	str_rp := strings.Replace(str_source, "a", "A", -1)
	// 替换后的字符串为:  AbAcAdAeAf
	fmt.Println("替换后的字符串为: ", str_rp)

	// 分割字符串
	// 按 "," 进行拆分
	strArr := strings.Split("hello,world,golang", ",")
	// strArr =  [hello world golang]
	fmt.Println("strArr = ", strArr)
	// 遍历该数组
	for i := 0; i < len(strArr); i++ {
		fmt.Printf("strArr[%v]=%v\n", i, strArr[i])
	}

	// 字符串大小写转换

	strl := "lowstring"
	stru := "UPPERstring"
	strmix := "lowUPPer"
	// 转换为大写
	strl = strings.ToUpper(strl)
	// 转换为小写
	stru = strings.ToLower(stru)
	// 转换为 大写
	strmix = strings.ToUpper(strmix)
	fmt.Printf("strl = %v, stru = %v, strmix = %v\n", strl, stru, strmix)

	// 去掉字符串左右两边空格
	// str = "Nice to see you"
	str = strings.TrimSpace("  Nice to see you    ")
	fmt.Printf("str = %q\n", str)

	// 去掉字符串两边指定字符串

	// 去掉左右两边的 * ! 和空格
	// 返回的是一个新的字符串
	// str = "welcome"
	str = strings.Trim("***! welcome !****", " !*")
	fmt.Printf("str = %q\n", str)

	// 去掉左边指定字符
	// str = "welcome !****"
	str = strings.TrimLeft("***! welcome !****", " !*")
	fmt.Printf("str = %q\n", str)

	// 去掉右边指定字符
	// str = "***! welcome"
	str = strings.TrimRight("***! welcome !****", " !*")
	fmt.Printf("str = %q\n", str)

	// 判断字符串是否以指定字符串开头
	// result =  true
	result := strings.HasPrefix("https://192.168.1.1", "https")
	fmt.Println("result = ", result)

	// 判断字符串是否以指定字符串结尾
	// result =  true
	result = strings.HasSuffix("1008611abcd", "bcd")
	fmt.Println("result = ", result)
}