golang 字符串处理

基本性质

  • GO的字符串都是UTF-8编码
    • 长度不固定,字符为 ASCII 码时占用1字节,其它字符占用2-4字节
    • C++,Java等语言都是占据固定长度
    • 好处是不仅减少了内存和硬盘空间占用,同时也不用像其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码
  • 字符串不可变
    • string[0] = 'a'编译错误
    • 只能先转换为[]byte再转换回去,或者使用strings.Replace函数
  • 获取字符串中某个字节的地址的行为是非法的
  • ""包裹的字符串会自动转义(如\n, \r), ``包裹的字符串会原样输出
    • 所以json字符串都是用反引号包裹
  • 字符串拼接
    • 最简单的方式时使用重载的+运算符
    • 在循环中使用加号 + 拼接字符串并不是最高效的做法,更好的办法是使用函数 strings.Join
    • 更好的方式是使用字节缓冲(bytes.Buffer)拼接
var buffer bytes.Buffer
for {
	if s, ok := getNextString(); ok { 
		buffer.WriteString(s)
	} else {
		break
	}
}
fmt.Print(buffer.String(), "\n")

strings包

strings.HasPrefix(s, sub) bool
strings.HasSuffix(s, sub) bool
strings.Contains(s, sub) bool
strings.Index(s, sub) int // 返回-1表示找不到
strings.LastIndex(s, sub) int
strings.Replace(str, old, new, n) string // n为-1则替换所有old
strings.Count(s, sub) int
strings.Repeat(s, n) string // 重复n次字符串s,返回新字符串
strings.ToLower(s) string
strings.ToUpper(s) string
strings.TrimSpace(s) string// 剔除空白符
strings.Trim(s, cutset) string
strings.Feilds(s) []string //去除s字符串的空格符
strings.Split(s, sep) []string // 自定义分隔符sep
strings.Join(sl []string, sep string) string // 合并字符串

strconv包

strconv.Itoa(i int) string
strconv.Atoi(s string) (i int, err error)

// fmt表示格式('b'、'e'、'f'、'g');prec表示精度;bitSize用32表示float32,用64表示float64
strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string
strconv.ParseFloat(s string, bitSize int) (f float64, err error)

// 将bool等类型转换为字符串后,添加到现有的字节数组中
strconv.AppendBool(dst []byte, b bool) []byte

正则匹配

//目标字符串
searchIn := "John: 2578.34 William: 4567.23 Steve: 5632.18"
pat := "[0-9]+.[0-9]+" //正则

f := func(s string) string{
   	v, _ := strconv.ParseFloat(s, 32)
   	return strconv.FormatFloat(v * 2, 'f', 2, 32)
}

if ok, _ := regexp.Match(pat, []byte(searchIn)); ok {
   fmt.Println("Match Found!")
}

re, _ := regexp.Compile(pat)
//将匹配到的部分替换为"##.#"
str := re.ReplaceAllString(searchIn, "##.#")
fmt.Println(str)
//参数为函数时
str2 := re.ReplaceAllStringFunc(searchIn, f)
fmt.Println(str2)

输出

Match Found!
John: ##.# William: ##.# Steve: ##.#
John: 5156.68 William: 9134.46 Steve: 11264.36
发布了161 篇原创文章 · 获赞 19 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/winter_wu_1998/article/details/102734179