Go核心开发学习笔记(十五) —— 开发常用字符串处理函数

常用函数汇总

1. 字符串长度统计函数:len(str)

package main
import "fmt"
func main() {
	// 统计字符串长度 len(str) hello啊 一共占8字节,汉字统一UTF-8占三字符
	str := "hello"
	fmt.Println(len(str1))         //5,
	str1 := "hello啊"
	fmt.Println(len(str1))         //8,可见len()是按照bytes返回的
}

2. 字符串遍历,如果包含中文,直接使用 r := []rune(str)

package main
import "fmt"
func main() {
	// rune采用字符方式遍历,ascii和汉字都是一个字符,不可以用 str := []rune(str) 方式复制,必须用异名变量
	str := "hello啊"
	r := []rune(str)
	for i := 0 ; i <= len(str); i++ {
		fmt.Printf("%c\n",r[i])
	}
}

3. 字符串转整数,整数转字符串

数字字符串转整数

package main
import (
	"fmt"
	"strconv"
	)
func main() {
	//数字字符串由string转为int,使用strconv.Atoi(),函数返回值为两个,结果和err,如果转换失败则用err接收失败结果
	//可以使用 num , _ := strconv.Atoi("123") 来忽略结果
	num , err := strconv.Atoi("123")
	if err != nil {                                  //err不为0,则为出现错误,利用这个特性对数据类型校验
		fmt.Println("转换错误,原因是:" , err)
	} else {
		fmt.Println("转换成功,转换结果为:" , num)
	}
}	

整数转成数字字符串

package main
import (
	"fmt"
	"strconv"
	)
func main() {
	// 整数一定可以转成字符串,所以不存在返回err
	var num1 int = 123
	r1 := strconv.Itoa(num1)
	fmt.Printf("%T %v",r1,r1)
}

4. 字符串转二进制切片,二进制切片转字符串

字符串转二进制切片

package main
import (
	"fmt"
	)
func main() {
	//字符串转二进制切片 使用 []byte(str) 方法
	var bytes = []byte("shit!")
	fmt.Printf("bytes = %v\n",bytes)
	//得到结果可以看到 打印出来的shit!全部是ascii编码的列表 bytes = [115 104 105 116 33]
}

二进制切片转字符串

package main
import (
	"fmt"
	)
func main() {
	str2 := string([]byte{97,98,99}) 
	fmt.Printf(str2)
}

5. 十进制转2,8,16进制 strconv.FormatInt()函数

package main
import (
	"fmt"
	"strconv"
	)
func main() {
	// 10进制转换成2,8,16进制,使用的 str := strconv.FormatInt(num,2/8/16) ,返回值是个字符串
	str3 := strconv.FormatInt(10,2)               //
	fmt.Println(str3)
	str4 := strconv.FormatInt(10,16)
	fmt.Println(str4)
}

6. 查找子串是否完全包含在母串中

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//子串是否在母串中,使用 string.Contains(母串,子串) ,返回是个布尔值,如果包含就是true
	str5 := "bullshit!"
	ret := strings.Contains(str5,"shit")
	fmt.Println(ret)
}

7. 贪婪匹配查询输出,例如一篇文章中包含多少个关键词

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//子串是否在母串中,使用 string.Count(母串,子串) ,返回值是个int
	str6 := "cesebeteure"
	ret1 := strings.Count(str6,"e")
	fmt.Println(ret1)
}

8. 不区分大小写的字符串比较,使用strings.EqualFold(),如果是 == 比较的话,“ABC” != "abc"

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//不区分大小写的比较,返回值是一个布尔值
	ret2 := strings.EqualFold("abc","ABC")
	fmt.Println(ret2)
}

9. 子串第一次出现在母串的索引值,使用strings.Index(),index为字符串下标的值

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//子串在母串中出现第一次的索引值,类似数组指针指向第一个值地址,如果子串不存在返回 -1
	str6 := "akunamatata"
	ret3 := strings.Index(str6,"tata")
	fmt.Printf("ret3=%v\n",ret3)              // ret3 = 7 , akunama(tata) t=7,也就是第8位
}

10. 将母串中的子串替换成另外一个子串,使用strings.Replace(母串,子串,替换子串,替换数量)4个参数,全部替换则 <替换数量> = -1

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//子串在母串中出现第一次的索引值,类似数组指针指向第一个值地址,如果子串不存在返回 -1
	str7 := "no no no !!!"
	ret4 := strings.Replace(str7,"no","yes",-1)      // 用中文字符串替代也没有问题  
	fmt.Printf("ret4=%v\n",ret4)              		 // "yes yes yes !!!"
	ret4 = strings.Replace(str7,"no","要",-1)
	fmt.Printf("ret4=%v\n",ret4)
}

11. 按照指定的字符进行分割(类似shell awk),一个字符串拆分成字符串数组,使用 strings.Split(字符串,分割符)

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//函数需要传递两个参数,一个是字符串,一个是分隔符
	str8 := "i love you"
	ret5 := strings.Split(str8," ")
	fmt.Printf("%v",ret5)
	//结果为 [i love you]

	//扩展:统计一句话多少个单词
	str9 := "i love you you love me oh yeah!"
	ret6 := strings.Split(str9," ")
	fmt.Println()
	for i := 0 ; i < len(ret6) ; i++ {
		fmt.Printf("%v = %v",i,ret6[i])
	}
}

12. 字符大小写转换

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//全转小写 strings.ToLower(str); 全转大写 strings.ToUpper(sstr)
	str10 := "i loVe yOu You LOvE Me"
	ret7 := strings.ToLower(str10)        //转小写 i love you you love me  
	fmt.Printf(ret7)
	ret8 := strings.ToUpper(str10)        //转大写 I LOVE YOU YOU LOVE ME
	fmt.Printf(ret8)
}

13. 文本处理两边空格,使用strings.TrimSpace(str)

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//字符串左右两边空格去掉
	str11 := "   i loVe yOu You LOvE Me      "
	ret9 := strings.TrimSpace(str11)        
	fmt.Printf("%q\n",ret9)                     // "i loVe yOu You LOvE Me"
}

14. 文本处理两边指定字符,使用strings.Trim(字符串,<去掉什么>(连续写)),传入2个参数

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//字符串左右两边空格去掉
	str12 := "  !     sh!it  !"
	ret10 := strings.Trim(str12," !")
	fmt.Printf("%v\n",ret10)                     // shit

	//字符串左右的叹号去掉,但是不能去掉中间,注意全角!和半角!是两个不一样的叹号
	ret11 := strings.TrimLeft(str12," !")         // 只处理左边
	fmt.Printf("%v\n",ret11)                     // sh!it   !
	ret12 := strings.TrimRight(str12," !")         // 只处理右边
	fmt.Printf("%v\n",ret12)                     //   !     sh!it
}

15. 判断字符串是否以子串开头和结尾,使用strings.HasPrefix(母串,子串)开头,strings.HasSuffix(母串,子串)结尾,返回的是一个布尔值

package main
import (
	"fmt"
	"strings"
	)
func main() {
	//是否以子串开头
	str13 := "https://www.bilibili.com"
	ret13 := strings.HasPrefix(str13,"https://")        
	fmt.Println(ret13)                              // true

	//是否以子串结尾
	str14 := "https://www.bilibili.com"
	ret14 := strings.HasSuffix(str14,".com")        
	fmt.Println(ret14)                              // true
}
发布了50 篇原创文章 · 获赞 18 · 访问量 4014

猜你喜欢

转载自blog.csdn.net/weixin_41047549/article/details/89792377