初始Go => 5.0 字符串中的方法 + for range + goto

前言:

  • 在字符串中 英文字符占1个字节, 中文字符占三个字节
  • 字符串是由一个个字符组成的。字符 => byte or rune

len方法

  • Go内置方法,可直接使用
    • 对于字符串来说, len获取的是字符串中的字节数(而不是字符数)
    • 对于切片来说, len获取的是元素的个数
      当字符串中含有中文字符时, 我们如何获取其长度呢? 先转换为切片然后获取切片元素个数
go 复制代码
    package main
    
    import (
        "fmt"
    )
    // 当字符串中有中文字符时,获取其长度
    str := "你好"
    length := []rune(str)
    
    fmt.Println (len (length)) // 2

转义符

转义: 将符号意义转为普通转为字符的特性

  • 转义符: \
  • 字符串: ``
  • 换行: \r\n
  • 制表符: \t

字符串比较

两个字符串是否相等条件: 字符串中的每个字符顺序和字母是否相等
两个字符串比较大小时: 每个字符依次按照ASCII码进行对比

字符串输出

  • 控制台输出文本: fmt.Println
  • 格式化字符串动词(指定要插入到字符串中的值的格式): fmt.Printffmt.Sprintf
    • %s: 插入字符串
    • %d: 插入整数
    • %f: 插入浮点数
    • %t: 插入布尔型
    • %v: 自动选择合适的格式
  • strings.Builder 是Go语言标准库的一个类型, 用于构建和操作数据库, 性能很高。
go 复制代码
package main

import (
    "fmt"
    "strings"
)

func main() {
    /**
    strings.Builder
    WriteString () // 用于将字符串追加到构建器中
    String() 获取构建器中的最终字符串
    */
    var stringBuilder strings.Builder
    name := "Sun"

    stringBuilder.WriteString("My name is ")
    stringBuilder.WriteString(name)

    res := stringBuilder.String()

    fmt.Println(res)
}

strings包

  • strings包提供了许多处理字符串的函数和方法
    • strings.Contains 是否含有子字符串
    • func Contains (s string, substr string) bool {} substr: 子字符串
    • strings.Count 子字符串中出现的个数
    • func Count (s string, substr string) int {}
    • strings.Split 将字符串拆分为字符串切片
    • func Split (s string, sep string) []string {}
    • strings.Index 查询子字符串在字符串中的位置若无返回 -1
    • func Index (s string, substr string) int {}
    • strings.Replace 替换字符串中的指定字符串
    • func Replace (s string, old string, new string, n int) string {} n < 0时, 全部替换。
    • strings.Trim () 去掉字符串前后指定的字符
    • func Trim (s string, cut string) string {]
    • strings.ToLower 字符串全部转为小写
    • func ToLower (s string) string {}
    • strings.ToUpper 字符串全部转为大写
    • strings.HasPrefix 检查字符串是否以指定前缀开头
    • func HasPrefix (s string, prefix string) bool {}
    • strings.HasSuffix 检查字符串是否以指定后缀结尾
    • func HasSuffix (s string, suffix string) bool {}
go 复制代码
package main

import (
    "fmt"
    "strings"
)

func main() {
    // strings.Split () 方法
    str := "123-123-123-123"
    res := strings.Split(str, "-")

    fmt.Println(res) // [123 123 123 123]
}
go 复制代码
package main

import (
    "fmt"
    "strings"
)

func main() {
    // string.Index 查找子字符串中的位置
    str := "Hello World"
    res := strings.Index(str, "l")

    fmt.Println(res) // 2
}
go 复制代码
package main

import (
    "fmt"
    "strings"
)

func main() {
    str := "Hello World"
    res := strings.Replace(str, "llo", "oo", 1)

    fmt.Println(res) // Heoo World
}
go 复制代码
package main

import (
    "fmt"
    "strings"
)

func main() {
    str := "Hello World"
    res := strings.Trim(str, "d")

    fmt.Println(res) // Hello Worl
}

Unicode

  • 全称: Universal Coded Character Set 即通用字符编码集
  • 本质: 是一种字符编码标准
  • 作用: 是为世界上所有已知的字符提供一个唯一的编号,以便不同的计算机和软件可以共享和处理文本数据,而不受字符集限制
    补充: Unicode 编码标准包括了各种语言的字符,包括拉丁字母、希腊字母、汉字、日文假名、数学符号、标点符号等等。每个字符都有一个唯一的 Unicode 码点,它是一个用十六进制表示的数字. 例如字母 "A" 的 Unicode 码点是 U+0041,汉字 "你" 的 Unicode 码点是 U+4F60

UTF-8

  • 全称: Unicode Transformation Format - 8-bit, 即 Unicode 转换格式 - 8 位
  • 作用: 将 Unicode 码点编码为字节序列的字符编码方案

注意: 在Go中 字符串是由Unicode码点组成的序列,UTF-8 编码方式将这些码点转换为字节,以便在计算机上进行存储和传输。你可以使用 for range 来遍历字符串,它会正确处理 UTF-8 编码的字符,并按字符遍历字符串,而不是字节。

for range

用来遍历有序的集合: 数组、字符串、切片、map、channell

  • 遍历字符串: 遍历出来的是Unicodem码
  • elementstr[index]区别
go 复制代码
package main

import "fmt"

func main() {
    str := "Sun你好"

    for index, element := range str {
       fmt.Println(index, element)
       /**
       0 83
       1 117
       2 110
       3 20320
       6 22909
       */
    }
}
go 复制代码
package main

import "fmt"

func main() {
    str := "Sun你好"

    for index, _ := range str {
       fmt.Println(index, str[index])
       /**
       0 83
       1 117
       2 110
       3 228
       6 229
       */
    }
}

goto语句(不推荐使用)

  • 含义: goto语句用于无条件跳转到程序中的标签位置的控制流语句
  • 用法: goto label
    goto 后面跟着一个标签名, 表示跳转到该标签的位置。 标签名是用户自定义的, 用以标识代码中的特定位置
go 复制代码
package main

import "fmt"

func main() {
    i := 0
start:
    fmt.Println(i)
    i++
    if i < 5 {
        goto start
    }
}
相关推荐
夜色呦1 分钟前
现代电商解决方案:Spring Boot框架实践
数据库·spring boot·后端
爱敲代码的小冰10 分钟前
spring boot 请求
java·spring boot·后端
java小吕布1 小时前
Java中的排序算法:探索与比较
java·后端·算法·排序算法
Goboy2 小时前
工欲善其事,必先利其器;小白入门Hadoop必备过程
后端·程序员
李少兄2 小时前
解决 Spring Boot 中 `Ambiguous mapping. Cannot map ‘xxxController‘ method` 错误
java·spring boot·后端
代码小鑫2 小时前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
Json____2 小时前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库
monkey_meng3 小时前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss3 小时前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
大鲤余3 小时前
Rust,删除cargo安装的可执行文件
开发语言·后端·rust