zoukankan      html  css  js  c++  java
  • 3.3 GO字符串处理

    strings方法

    index

    判断子字符串或字符在父字符串中出现的位置(索引)
    Index 返回字符串 str 在字符串 s 中的索引( str 的第一个字符的索引),-1 表示字符串 s 不包含
    字符串 str :
    strings.Index(s, str string) int


    LastIndex

    返回字符串 str 在字符串 s 中最后出现位置的索引( str 的第一个字符的索引),-1 表示
    字符串 s 不包含字符串 str :
    strings.LastIndex(s, str string) int

    IndexRune
    如果 ch 是非 ASCII 编码的字符,建议使用以下函数来对字符进行定位:
    strings.IndexRune(s string, ch int) int

    func test12(){
        var str string = "学习,就是知已不足,寻找改变的方法,尝试尝试再尝试,并以此为乐...这就是学习"
        fmt.Printf("The position of "方法" is: ")
        fmt.Printf("%d
    ", strings.Index(str, "方法"))
        fmt.Printf("The position of the first instance of "学习" is: ")
        fmt.Printf("%d
    ", strings.Index(str, "学习"))
        fmt.Printf("The position of the last instance of "学习" is: ")
        fmt.Printf("%d
    ", strings.LastIndex(str, "学习"))
        fmt.Printf("The position of "哪怕改变再小" is: ")
        fmt.Printf("%d
    ", strings.Index(str, "哪怕改变再小"))
    }

    输出

    The position of "方法" is: 45
    The position of the first instance of "学习" is: 0
    The position of the last instance of "学习" is: 105
    The position of "哪怕改变再小" is: -1

    字节与字符串转换

    /**
    func (this *Server) socketParserHandler(client *genTcpServer.Client, fullData []byte) {
    
        fmt.Println("original data is", client)
        strPointerHex := fmt.Sprintf("%p", unsafe.Pointer(client))
        fmt.Println("connection is", strPointerHex)
    
        strPointerInt := fmt.Sprintf("%d", unsafe.Pointer(client))
        fmt.Println("connection is", strPointerInt)
    
        i, _ := strconv.ParseInt(strPointerInt, 10, 0)
    
        var pointer *genTcpServer.Client
        pointer = *(**genTcpServer.Client)(unsafe.Pointer(&i))
        fmt.Println("connection pointer is", pointer)
    
        debugMsg := fmt.Sprintf("%p", unsafe.Pointer(pointer))
        fmt.Println("debugMsg is", debugMsg)
     */
    func unsafeTest()  {
        ss := "工工在aaa"
        s1 := []byte(ss)
        a := unsafe.Pointer(&s1) //0xc0000a6ee0  取针指指向的地址,不限定类型
        fmt.Println(a)
    
        bb := (*string)(a)       //0xc0000a6ee0  取字节数组的开始地址,确定地址存储的类型是字符串
        b := fmt.Sprintf("%v",bb)
        fmt.Println(b)
        s2 := *bb
        fmt.Println(s2)  //工工在aaa
    
    
    }
    
    
    func testByte()  {
        ss := "工工在aaa"
        s1 := []byte(ss)
        mm := fmt.Sprintf("%v",s1)
        fmt.Println(mm)
    
        ss = ByteArrayToStr(mm)
        fmt.Println(ss)
    }
    
    //字符串转字节数据-->fmt.Sprintf("%v",s1) 格式化为字符串后-->转回原来的字符串
    func ByteArrayToStr(byteStr string)  string{
        byteStr = strings.TrimLeft(byteStr,"[")
        byteStr = strings.TrimRight(byteStr,"]")
        b := strings.Split(byteStr," ")
        var bn  = make([]byte,0)
        for _,v := range b {
            i,_ := strconv.Atoi(v)
            c := byte(i)
            bn = append(bn,c)
        }
        return string(bn)
    }
    
    
  • 相关阅读:
    [转贴] IPSEC From 知乎
    intel 的架构图
    IPV6 简单验证
    exsi6.0远程修改密码
    Oracle单个datafile大小的限制
    用Linux完成Oracle自动物理备份
    vSphere Client 更改 ESX/ESXi 主机的端口
    netstat Recv-Q和Send-Q
    Linux下安装(卸载)KDE和GNOME
    完美解决xhost +报错: unable to open display ""
  • 原文地址:https://www.cnblogs.com/perfei/p/12262763.html
Copyright © 2011-2022 走看看