rune相当于go的char
使用range遍历pos,rune对
使用utf8.RuneCountInString获得字符数量
使用len获得字节的长度
常规的使用方法:都储存在strings包里面,如果需要使用一个新的字符串功能,只需要使用对应API,安全性更高
//strings的所有用法用例在https://blog.csdn.net/u013542440/article/details/51322449 可以找到
package main import ( "fmt" "unicode/utf8" ) //联系期间还是提出来比较直观 const ( s = "Yes我爱世界" ) func main() { fmt.Println(s) //fmt.Printf("%x\n",[]byte(s) ) for _, b := range []byte(s) { fmt.Printf("%x ", b) } //一般字符占有1个字节,一个汉字占有三个字节 fmt.Println() for i, ch := range s { //ch is a rune fmt.Printf("(%d %x) ", i, ch) } fmt.Println() fmt.Println("rune count:" ,utf8.RuneCountInString(s)) bytes:=[]byte(s) for len(bytes)>0 { //每次获取字符串前端的一个字符,将它储存到rune里面,然后返回解析之后的字符和这个字符所占的字节数 ch, size := utf8.DecodeRune(bytes) bytes = bytes[size:] fmt.Printf("%c(%d) ", ch, size) } fmt.Println() //通过字符专用rune的表达方式很轻易就可以获取到对应的字符串的表达形式 for i, ch:= range []rune(s){ fmt.Printf("%c(%d) ", ch, i) } fmt.Println() }
又返回了前面的情况,只需要将byte改成rune即可
package main import "fmt" //这个思想大体是确保每一个局部都是不重复的,那么整体就是不重复的 func lengthOfNonRepeatingSubStr(s string) int { lastOccured := make(map[rune]int) start := 0 maxLength := 0 for i, ch := range []rune(s) { if lastI, ok := lastOccured[ch]; ok && lastI >= start { start = lastI + 1 } if i-start+1 > maxLength { maxLength = i - start + 1 } lastOccured[ch] = i } return maxLength } func main() { originStr:= "12233321" fmt.Println(lengthOfNonRepeatingSubStr(originStr)) originStr = "我爱你爱我" fmt.Println(lengthOfNonRepeatingSubStr(originStr)) originStr = "ha我爱你" fmt.Println(lengthOfNonRepeatingSubStr(originStr)) }
package main import ( "fmt" "unicode/utf8" "strings" ) //联系期间还是提出来比较直观 const ( s = "Yes我爱世界" ) func main() { fmt.Println(s) //fmt.Printf("%x\n",[]byte(s) ) for _, b := range []byte(s) { fmt.Printf("%x ", b) } //一般字符占有1个字节,一个汉字占有三个字节 fmt.Println() for i, ch := range s { //ch is a rune fmt.Printf("(%d %x) ", i, ch) } fmt.Println() fmt.Println("rune count:", utf8.RuneCountInString(s)) bytes := []byte(s) for len(bytes) > 0 { //每次获取字符串前端的一个字符,将它储存到rune里面,然后返回解析之后的字符和这个字符所占的字节数 ch, size := utf8.DecodeRune(bytes) bytes = bytes[size:] fmt.Printf("%c(%d) ", ch, size) } fmt.Println() //通过字符专用rune的表达方式很轻易就可以获取到对应的字符串的表达形式 for i, ch := range []rune(s) { fmt.Printf("%c(%d) ", ch, i) } fmt.Println() //测试常用的方法 origin:="a a ss d f g f D S a a" strs := []string{"111", "222"} fmt.Println(strings.Fields(origin))//按照空格进行隔开,无视中间空格个数 fmt.Println(strings.Split(origin, "11"))//按照空格进行分割,不无视中间空格个数 fmt.Println(strings.Join(strs, ","))//将字符串数组间插入sep字符串合成一个字符串对象 fmt.Println(strings.Contains(origin, "ss"))//检查字符串的包含关系 fmt.Println(strings.Index(origin, "ss"))//获取对应字符串的首字母的位置 fmt.Println(strings.ToLower(origin))//全部转为小写 fmt.Println(strings.ToUpper(origin))//全部转为大写 fmt.Println(strings.Trim(origin," a "))//相当于过滤相应的字符,同理有TrimLeft,TrimRight }