go语言学习(2)rune以及strings

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
   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值