go字符串
Golang中的字符串是一个不可改变的UTF-8
字符序列,一个ASCII码占用1个字节,其它字符根据需要占用2-4个字节。
获取字符串长度
Go语言的内建函数len()
,可以用来获取切片、字符串、通道(channel)等的长度。下面的代码可以用len()
来获取字符串的长度:
package main
import (
"fmt"
)
func main() {
str1 := "ZG"
str2 := "中国"
fmt.Println(len(str1)) // 2
fmt.Println(len(str2)) // 6
}
这里的差异是由于Go语言的字符串都以UTF-8
格式保存,每个中文占用3个字节,因此使用len()
获得两个中文文字对应的6个字节。
如果希望按习惯上的字符个数来计算,就需要使用Go语言中UTF-8
包提供的RuneCountInString()
函数,统计Uncode字符数量:
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
str := "中国"
fmt.Println(utf8.RuneCountInString(str)) // 2
}
截取子字符串
可以通过下面的语法截取字符串中的内容:
s := "abcdef"
// 截取s[1, 4)作为子字符串
s1 := s[1:4] // bcd
修改字符串
要修改字符串的内容,可以先将字符串的内容复制到一个可写的变量中,一般是 []byte 或 []rune 类型的变量,然后再进行修改:
package main
import (
"fmt"
)
func main() {
s := "hello,世界"
bs := []byte(s)
rs := []rune(s)
bs[0] = 'e'
rs[6] = '神'
fmt.Println(string(bs), string(rs))
}
忽略大小写比较字符串是否相等
package main
import (
"fmt"
"strings"
)
func main() {
for {
var name1, name2 string
fmt.Scanln(&name1)
fmt.Scanln(&name2)
fmt.Println(name1 == name2)
fmt.Println(strings.EqualFold(name1, name2))
}
}
和其它类型相互转换
- int和string类型转换:
package main
import (
"fmt"
"strconv"
)
func main() {
n := 10
str := strconv.Itoa(n)
n2, err := strconv.Atoi(str)
if nil != err {
fmt.Println(err.Error())
}
fmt.Println(n, n2)
}
拼接字符串
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
n := 100
strs := make([]string, n)
for i := 0; i < n; i++ {
strs[i] = strconv.Itoa(i)
}
s := strings.Join(strs, "+")
fmt.Println(s)
}
读取一行
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
input := bufio.NewScanner(os.Stdin)
input.Scan()
s := input.Text()
fmt.Println(s)
}