• 字符串类型及其常用操作


    1、字符串类型

    字符串是一种值类型,且值不可变,即创建某个文本后将无法再次修改这个文本的内容,字符串是字节的定长数组。

    1)定义字符串

    可以使用双引号""来定义字符串,字符串中可以使用转义字符来实现换行、缩进等效果。

    一般的比较运算符(==、!=、<、<=、>=、>)是通过在内存中按字节比较来实现字符串比较的,因此比较的结果是字符串自然编码的顺序。字符串所占的字节长度可以通过函数 len() 来获取。

    字符串的内容(纯字节)可以通过标准索引法来获取,在方括号[]内写入索引,索引从 0 开始计数。

    2)字符串拼接符“+”

    两个字符串 s1 和 s2 可以通过 s := s1 + s2 拼接在一起。将 s2 追加到 s1 尾部并生成一个新的字符串 s。也可以使用“+=”来对字符串进行拼接。

    示例:

    package main
    
    import "fmt"
    
    func main() {
    	var s1 = "hello" + ", world"
    	var s2 = "hello" +
    		", world"
    	var s3 = "hello"
    	s3 += ", world"
    	fmt.Println(s1)
    	fmt.Println(s2)
    	fmt.Println(s3)
    }
    

      

    3)字符串实现基于UTF-8编码

    Go语言中字符串的内部实现使用 UTF-8 编码,通过 rune 类型,可以方便地对每个 UTF-8 字符进行访问。当然,Go语言也支持按照传统的 ASCII 码方式逐字符进行访问。

    4)定义多行字符串

    在Go语言中,使用双引号书写字符串的方式是字符串常见表达方式之一,被称为字符串字面量(string literal),这种双引号字面量不能跨行,如果想要在源码中嵌入一个多行字符串时,就必须使用`反引号。

    在这种方式下,反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。

    示例:

    package main
    
    import "fmt"
    
    func main() {
    	var str = `你好
    
    		世界
    `
    	fmt.Println(str)
    }
    

      

    2、计算字符串长度

    len() 函数的返回值的类型为 int,表示字符串的 ASCII 字符个数或字节长度。

    如果希望按习惯上的字符个数来计算,就需要使用 Go 语言中 UTF-8 包提供的 RuneCountInString() 函数,统计 Uncode 字符数量。

    示例:

    package main
    
    import (
    	"fmt"
    	"unicode/utf8"
    )
    
    func main() {
    	var s1 = "abc"
    	var s2 = "你好a"
    	fmt.Printf("s1: %v
    ", len(s1)) // 3
    	fmt.Printf("s2: %v
    ", len(s2)) // 7
    	fmt.Printf("s1: %v
    ", utf8.RuneCountInString(s1)) // 3
    	fmt.Printf("s2: %v
    ", utf8.RuneCountInString(s2)) // 3
    }
    

      

    3、遍历字符串

    ASCII 字符串遍历直接使用下标。
    Unicode 字符串遍历用 for range。

    示例:

    package main
    
    import "fmt"
    
    func main() {
    	var str = "你好,world"
    	for i := 0; i < len(str) ; i++  {
    		fmt.Printf("%c, %d
    ", str[i], str[i])
    	}
    	fmt.Println("-------------------------")
    	for _, s := range str{
    		fmt.Printf("%c, %d
    ", s, s)
    	}
    }
    

      

    4、字符串截取

    strings.Index:正向搜索子字符串。
    strings.LastIndex:反向搜索子字符串。
    搜索的起始位置可以通过切片偏移制作。

    示例:

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    func main() {
    	var str = "你好, world, new"
    	pos := strings.Index(str, ",")
    	lastPos := strings.LastIndex(str, ",")
    	fmt.Printf("pos = %d, lastPos=%d
    ", pos, lastPos) // pos = 6, lastPos=13
    }
    

      

    5、修改字符串

    Go 语言的字符串是不可变的。
    修改字符串时,可以将字符串转换为 []byte 进行修改。
    []byte 和 string 可以通过强制类型转换互转。

    示例:

    package main
    
    import "fmt"
    
    func main() {
    	var str = "hello, world"
    	strBytes := []byte(str)
    	for i := 5; i <= 6 ; i++  {
    		strBytes[i] = '-'
    	}
    	fmt.Println(string(strBytes)) // hello--world
    }
    

      

    6、字符串拼接

    除了加号连接字符串,Go 语言中也有类似于 StringBuilder 的机制来进行高效的字符串连接。

    示例:

    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	var stringBuilder bytes.Buffer // 声明字节缓冲
    	// 把字符串写入缓冲
    	stringBuilder.WriteString("hello,")
    	stringBuilder.WriteString("世界")
    	// 将缓冲以字符串形式输出
    	fmt.Println(stringBuilder.String())
    }
    

      

    7、格式化输出

    fmt.Sprintf(格式化样式, 参数列表…)

    格式化样式:字符串形式,格式化动词以%开头。
    参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。

    示例:

    package main
    
    import "fmt"
    
    func main() {
    	name := "hello"
    	str := fmt.Sprintf("%s, world", name)
    	fmt.Println(str)
    }
    

      

  • 相关阅读:
    React Native区分安卓/iOS平台
    yarn命令使用
    React 源码剖析系列 - 不可思议的 react diff
    dangerouslySetInnerHTMl
    iOS12下APP进入后台后再返回前台连接断开
    AttributedString-富文本字符串
    Bundle创建与使用
    UIButton-详解
    实战项目-百思不得姐-精华
    iOS 抖音个人主页布局开发(简单)
  • 原文地址:https://www.cnblogs.com/ACGame/p/11871724.html
Copyright © 2020-2023  润新知