go之字符串

len

  字符串长度,len指的是字节

package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	var s ="hello world"
	fmt.Println(len(s))  //11  11个字符,11 字节
	var s1 ="hello world 中国"
	fmt.Println(len(s1))  //18  14个字符,18 字节  ,utf-8编码一个中文字符,占3个字节
	fmt.Println(utf8.RuneCountInString(s1))  //// run 是字符  14
}

for循环字符串

package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	var s ="hello world"
	var s1 ="hello world 中国"
	for _,v:=range s{  // range循环的就是字符
		fmt.Println(string(v))
	}
	for i:=0;i<len(s);i++{  // 按字节循环,转成字符串会出乱码
		fmt.Println(string(s[i]))
	}
	for i:=0;i<utf8.RuneCountInString(s);i++{  // 按字节循环,转成字符串会出乱码
		fmt.Println(string(s[i]))  // 按字节取,取出来转还是有问题,还是要用range循环
	}
	for _,v:=range s1{
		fmt.Println(string(v))
	}
	for i:=0;i<len(s1);i++{
		fmt.Println(string(s1[i]))
	}
	for i:=0;i<utf8.RuneCountInString(s1);i++{
		fmt.Println(string(s1[i]))
	}
}

字符串是不可变的

package main

import (
	"fmt"
)

func main() {
	var s ="hello world 中国"
	//s[0]='h'
	fmt.Println(s[0])  // s是unicode编码的104
}

通过字节切片

package main

import (
	"fmt"
)

func main() {
	var b []byte=[]byte{104,105,106,'a'}
	fmt.Println(string(b))  //hija
}

根据字符切片构造

package main

import (
	"fmt"
)

func main() {
	var b []rune=[]rune{104,105,10688,'中'}
	fmt.Println(string(b))  //hij中
}

字符串和字节切片,和字符切片相互转换

  根据字符取值,没有操作,转成字符切片,再取

package main

import (
	"fmt"
)

func main() {
	var s ="hello world 中国"
	var b []rune=[]rune(s)
	fmt.Println(b[12])  //20013
	fmt.Println(string(b[13]))  //国
} 
package main

import (
	"fmt"
)

func main() {
	var s ="hello world 中国"
	var b []byte=[]byte(s)
	fmt.Println(b[10])  //100
	fmt.Println(string(b[10]))  //d
}

  

posted @ 2022-09-16 18:02  那就凑个整吧  阅读(19)  评论(0编辑  收藏  举报