go字符串操作

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)
}
原文地址:https://www.cnblogs.com/HachikoT/p/13953851.html