zoukankan      html  css  js  c++  java
  • Go语言中的string知识点

    1.Go语言String的本质就是一个[]byte,所以他们之间可以互相转换,byte数组的长度就是字符串的长度。

    func StringTest1() {
    str := "Hello,World"
    a := str[0]
    b := str[1]
    fmt.Printf("a=%c ", a)
    fmt.Printf("b=%c ", b)
    }

     结果

    a=H 
    b=e
    str=Mello,World

     

    2.字符串的值一旦指定,就不能进行修改。如果想修改,则可以先将字符串装换成slice。

    //当试图去修改str时候
    str[0] = 'M' 

    会出现如下错误提示

    func StringTest1() {
       str := "Hello,World"
       a := str[0]
       b := str[1]
       fmt.Printf("a=%c
    ", a)
       fmt.Printf("b=%c
    ", b)
    
       var byteSlice []byte
       byteSlice = []byte(str)
       byteSlice[0] = 'M'
       str = string(byteSlice)
       fmt.Printf("str=%s
    ", str)
    }

     结果

    a=H 
    b=e
    str=Mello,World

    3.rune表示utf8的字符,一个rune字符由一个或多个byte组成。

    rune和字符串长度之间是什么肥四?可以参考下面的例子:

    func StringTest2() {
    
        str2 := "Hello,世界"
    
        var str2ByteSlice []byte
        str2ByteSlice = []byte(str2)
    
        var str2RuneSlice []rune
        str2RuneSlice = []rune(str2)
    
        fmt.Printf("strLen=%v
    ",len(str2) )
        fmt.Printf("str2ByteSlice=%v
    ",len(str2ByteSlice) )
        fmt.Printf("str2RuneSlice=%v
    ",len(str2RuneSlice) )
    
        for i:=0;i<len(str2RuneSlice);i++{
            var b = str2RuneSlice[i]
            fmt.Printf("str2RuneSlice[%d]=%c
    " ,i,b)
        }

    结果是什么?

    strLen=12 
    str2ByteSlice=12 
    str2RuneSlice=8 

    从结果看到

    ①字符串的长度和byte切片的长度是一致的

    ②字符串的长度要比rune切片的长度大,说明一个中文字符需要占用多个byte,这里是就是3个,所以才有后面 str2RuneSlice = 8这个结果

     进而我们可以遍历这个rune切片,追加下面代码

        for i:=0;i<len(str2RuneSlice);i++{
            var b = str2RuneSlice[i]
            fmt.Printf("str2RuneSlice[%d]=%c
    " ,i,b)
        }

    结果

    str2RuneSlice[0]=H 
    str2RuneSlice[1]=e 
    str2RuneSlice[2]=l 
    str2RuneSlice[3]=l 
    str2RuneSlice[4]=o 
    str2RuneSlice[5]=, 
    str2RuneSlice[6]=世 
    str2RuneSlice[7]=界 

     

  • 相关阅读:
    LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
    .Net 使用的快捷键
    P2073 送花
    洛谷P1514 引水入城
    花园
    八数码难题
    并查集题目整理
    树链剖分(强势借鉴)
    模拟题
    考试整理
  • 原文地址:https://www.cnblogs.com/dcz2015/p/10417198.html
Copyright © 2011-2022 走看看