1.1.1. 一、string 底层是一个 byte 数组,因此 string 也可以进行切片处理。

例子如下:

    str := "hello,你好"

    //按照字节切片,如果切片的地方有中文,fmt.Println(slice1)会乱码
    slice1 := str[1:]
    fmt.Println(slice1)// ello,你好

注意:string按照字节切片,如果切片的地方有中文,fmt.Println(slice1)输出会乱码

1.1.2. 二、 string 是不可变的,也就说不能通过 str[0] = 'z' 方式来修改字符串。

    str := "hello,你好"
    str[0] = 'm' // 编译报错

如果需要修改字符串,可以先将 string 转换为 []byte 或者[]rune切片,再修改切片,然后 重写转成 string。

方式1:字符串 强制转换--->[]byte切片--->改变切片的元素之后,强制转换-->字符串。[]byte作为中间类型。这种方式如果被替换的是中文会乱码。

    str := "hello,你好"
    arr1 := []byte(str) //强制转换为切片类型

    //[104 101 108 108 111 239 188 140 228 189 160 229 165 189]
    fmt.Println(arr1)

    arr1[0] = 'm'
    // string(arr1) 强制转换为string输出:mello,你好
    fmt.Println(string(arr1))

方式2:string强制转换-->[]rune--->改变切片的元素之后,强制转换-->字符串。[]rune作为中间类型。可以处理中文等

    str := "大家好 hello"
    arr1 := []rune(str) //强制转换为rune切片类型

    //[22823 23478 22909 32 104 101 108 108 111]
    fmt.Println(arr1)

    arr1[0] = 'm'
    // string(arr1) 强制转换为string输出:m家好 hello
    fmt.Println(string(arr1))

results matching ""

    No results matching ""