Go The Way 之string介绍及string与基本数据类型的转换

string

func StringDemo() {
	// len() 长度
	str:= "hello"
	fmt.Println(len(str)) // 5
	str = "hello上"
	fmt.Println(len(str)) // 8 Go 采用UTF-8 的字符集,所以一个汉字三个字节
	// 将String 遍历打印 
	for _,value := range str {
		//fmt.Printf("%c", value) // 输出 hello上
		fmt.Printf("%q", value) // 输出 'h''e''l''l''o''上'
	}
	fmt.Println("---------------") 
	// 使用单纯的for循环
	for i:= 0; i<len(str);i++ {
		fmt.Printf("%c", str[i]) //输出 helloä 可以看出 汉字无法输出需要转换
	}

	str2 := []rune(str) // 将无法使用简单for循环遍历不出的汉字,使用rune 转一下,即可正常输出汉字
	for i:= 0; i<len(str2);i++ {
		fmt.Printf("%c", str2[i]) //输出 hello上 
	}

	// String 与 byte 的互转
	byteData := []byte("hello")
	fmt.Printf("\n String 转 byte : %v\n", byteData)//  String 转 byte : [104 101 108 108 111]

	// byte 转 String
	str = string([]byte{104,101,108, 108, 111})
	fmt.Printf("\n byte 转 String : %s\n", str) //byte 转 String : hello
}
  • 长度: len()
  • 遍历:for _,value := range str {}
  • 使用for循环无法遍历出汉字,所以需要使用[]rune 转换
	str2 := []rune(str) // 将无法使用简单for循环遍历不出的汉字,使用rune 转一下,即可正常输出汉字
	for i:= 0; i<len(str2);i++ {
		fmt.Printf("%c", str2[i]) //输出 hello上 
	}
  • string 转byte: byteData := []byte(“hello”)
  • byte 转 String: str = string([]byte{104,101,108, 108, 111})

基本数据类型转string

// 基本数据类型转 String
func baseDataToString() {
	var num1 int = 23
	var num2 float64 = 23.23
	var num3 bool = false
	var mychar byte = 'a'
	var str string

	str = fmt.Sprintf("%d", num1)
	fmt.Printf("str 的类型 %T, 和值 %q\n", str, str)
	str = fmt.Sprintf("%f", num2)
	fmt.Printf("str 的类型 %T, 和值 %q\n", str, str)
	str = fmt.Sprintf("%t", num3)
	fmt.Printf("str 的类型 %T, 和值 %q\n", str, str)
	str = fmt.Sprintf("%c", mychar)
	fmt.Printf("str 的类型 %T, 和值 %q\n", str, str)
	
	//int64 转 string
	str = strconv.FormatInt(int64(num1), 10)
	fmt.Printf("str 的类型 %T, 和值 %q\n", str, str)
	//float 转 string
	str = strconv.FormatFloat(num2, 'f', 8, 64) //保留8位小数,64表示这个小数是 float64
	fmt.Printf("str 的类型 %T, 和值 %q\n", str, str)
	//bool 转 string
	str =  strconv.FormatBool(num3)
	fmt.Printf("str 的类型 %T, 和值 %q\n", str, str)
	str = fmt.Sprintf("%c", mychar)
	fmt.Printf("str 的类型 %T, 和值 %q\n", str, str)
	//int 转 string
	str =  strconv.Itoa(num1)
	fmt.Printf("str 的类型 %T, 和值 %q\n", str, str)

}
  • 主要使用的是strconv 包和 fmt包下的fmt.Sprintf() 函数
  • int64 转 string: strconv.FormatInt(int64(num1), 10)
  • float 转 string:strconv.FormatFloat(num2, ‘f’, 8, 64) //保留8位小数,64表示这个小数是 float64
  • bool 转 string: strconv.FormatBool(num3)
  • int 转 string: strconv.Itoa(num1)

string 转基本数据类型

// String 数据转基本数据类型
func  stringToBaseData() {
	num1, num2, num3 := "true", "12","23.23"

	str,err := strconv.ParseBool(num1)
	if err != nil {
		fmt.Println(err)
		return 
	}

	fmt.Println(str)

	str1,err1 := strconv.ParseInt(num2, 10, 64 )
	if err1 != nil {
		fmt.Println(err1)
		return 
	}

	fmt.Println(str1)

	str2,err2 := strconv.ParseFloat(num3, 64)
	if err2 != nil {
		fmt.Println(err2)
		return 
	}

	fmt.Println(str2)
}
  • 主要使用strconv包下的函数
  • string 转bool : strconv.ParseBool(num1)
  • string 转int:strconv.ParseInt(num2, 10, 64 ) 10进制 int64
  • string 转float:strconv.ParseFloat(num3, 64) 转为float64

string的其他内置函数

func stringOtherFunction() {
	// 查找子串是否在指定的字符串中
	boo := strings.Contains("abc123","abc")
	fmt.Println(boo) //true

	// 查找子串是否在指定的字符串中有多少个
	iValue := strings.Count("abc123abc","abc")
	fmt.Println(iValue) //2

	// 判断是否相等(不区分大小写的),== 是区分大小写的
	boo = strings.EqualFold("abc","Abc")
	fmt.Println(boo) // true
	fmt.Println("abc" == "Abc") //false

	// 查找子串在字符串中的位置,index值从0开始的。 当没找到时返回-1
	iValue = strings.Index("123abc123","abc")
	fmt.Println(iValue) //3

	// 查找子串在字符串中的最后一次的位置。 当没找到时返回-1
	iValue = strings.LastIndex("abc123abc123","abc")
	fmt.Println(iValue) //3

	// 将字符串中指定的子串 abc 替换成 ert ,且只替换 1 个
	str := strings.Replace("abc123abc123","abc","ert",1)
	fmt.Println(str)//ert123abc123

	//小写转大写
	str  = strings.ToUpper("abc")
	fmt.Println(str)

	// 大写转小写
	str = strings.ToLower("AbcT")
	fmt.Println(str)

	//切割函数,按照设定的分隔符进行切割获取字符串数组
	strs := strings.Split("abc,123,bcd,234",",")
	fmt.Println("打印字符串数组。。。。")
	for _,str := range strs {
		fmt.Println(str)
	}

	// 将字符串左右两边的空格去除
	str = strings.TrimSpace(" str str ")
	fmt.Println(str)//str str

	//将字符串左右指定的字符去除
	str = strings.Trim("!hello world!", "!")
	fmt.Println(str) //hello world

	//将字符串左边指定的字符去除
	str = strings.TrimLeft("!hello world!", "!")
	fmt.Println(str) //hello world!

	//将字符串右边指定的字符去除
	str = strings.TrimRight("!hello world!", "!")
	fmt.Println(str) //!hello world

	// 判断字符串是否已某一字符串开头的
	boo = strings.HasPrefix("abc123","123")
	fmt.Println(boo) //false

	// 判断字符串是否已某一字符串结尾的
	boo = strings.HasSuffix("abc123","123")
	fmt.Println(boo) //true

}

  • 以上函数都来自包 strings
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值