package main
import "fmt"
func main(){
s := "hello 世界!"
r :=[]rune(s)
r[6] = '中'
r[7]='国'
fmt.Println(s)
fmt.Println(string(r))
}
因为go语言中,字符串内容不能修改,也就不能s[i]这种方式修改字符串中的UTF-8编码,如果确实需要修改,那么可以讲字符串的内容复制到另一个可写的变量中,然后再进行修改,一般使用[]byte []rune类型
如果要对字符串中的字节进行修改,则需要转为[]byte格式,如果要对字符串中的字符进行修改,则需要转为[]rune格式,准换过程会自动复制数据
package main
import "fmt"
func main(){
s := "hello 世界!"
r :=[]rune(s)
r[6] = '中'
r[7]='国'
fmt.Println(s)
fmt.Println(string(r))
}
和c/C++不一样,go语言中字符串长度是限定的,而非特殊字符\0,string类型的0值是长度为0的字符串,是空""
一般比较运算付 == !== < <= >= > 通过再内存中按字节比较来实现字符串的对比。可以通过函数len()来获取字符串所占用的字节长度。len(str)字符串的内容纯字节,可以通过标准索引法来获取,再中括号[]内写入索引。
字符串str的第一个字节str[0]第i字节 str[i-1]最后一个字节str[len(str)-1]
需要注意的是这种转换方案对纯ASCII码的字符串有效,获取字符串中的某字节的地址是非法行为&str[i]