04、字符串

1、字符串基本知识

--go 语言中时使用 “” 表示字符串

--定义的实例:
    s1 := "hello"
    s2 := "你好"

--Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示。
    转义符	含义
    \r	    回车符(返回行首)
    \n	    换行符(直接跳到下一行的同列位置)
    \t	    制表符
    \'	    单引号
    \"	    双引号
    \\	    反斜杠

--代码示例:
    package main
    import (
        "fmt"
    )
    func main() {
        fmt.Println("str := \"c:\\Code\\lesson1\\go.exe\"")
    }

2、多行字符串

--Go语言中要定义一个多行字符串时,就必须使用反引号字符:
    s1 := `第一行
    第二行
    第三行
    `
    fmt.Println(s1)

3、字符串常用操作

字符串的常用操作
    len(str)	求长度
    +或fmt.Sprintf	拼接字符串
    strings.Split	分割
    strings.contains	判断是否包含
    strings.HasPrefix,strings.HasSuffix	前缀/后缀判断
    strings.Index(),strings.LastIndex()	子串出现的位置
    strings.Join(a[]string, sep string)	join操作

--代码示例:
    # 导入包strings
    import (
	    "fmt"
	    "strings"
    )

    # 转义字符
    var s1 = "\"D:\\代码\\【瑞客论坛 www.ruike1.com】老男孩带你21周搞定Go语言【全 242】\""
	fmt.Print(s1)

    # 字符串常用操作
        // 两种拼接字符串的方式
	    var s1 = "liming"
	    var s2 = "yuel"
	    var s3 = s1 + s2                     // 使用+拼接字符串
	    var s4 = fmt.Sprintf("%s%s", s1, s2) // 使用 fmt.Sprintf 拼接字符串
	    fmt.Println(s3)
	    fmt.Println(s4)

	    // 字符串长度获取
	    fmt.Println(len(s4))

	    // split 切割路径
	    path := "D:\\代码\\go\\day01"
	    ret_path := strings.Split(path, "\\")
	    fmt.Println(strings.Split(path, "\\")) // 这里记住是一个字符串 \\ 所以双引号,和python不同单引号、双引号无所谓

	    // 字符串中是否包含 某一个字符串
	    fmt.Println(strings.Contains(path, "代码"))
	    fmt.Println(strings.Contains(path, "daima"))

	    // 字符串前缀 后缀
	    fmt.Println(strings.HasPrefix(path, "D:\\"))
	    fmt.Println(strings.HasSuffix(path, "day01"))

	    // 找出字符串中某一个字符串的位置,一个英文占一个位置 一个中文汉字占3个位置
	    fmt.Println(strings.Index(path, "\\go"))
	    fmt.Println(strings.LastIndex(path, "\\go"))
	    fmt.Println(strings.LastIndex(path, "码"))

	    // 一个字符串列表依据某一个字符拼接而成
	    fmt.Println(strings.Join(ret_path, "+"))
    

4、byte 和 rune

--组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号(’)包裹起来,如:
    --var a := '中'
    --var b := 'x'

--在go语言中,字符有以下两种:
    --uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
    --rune类型,代表一个 UTF-8字符。

--当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。

--示例一:
    --遍历一个字符串中的字符:含中文,如果是用 byte 就会出现问题,如果使用的是rune则正常
    --代码示例如下:
    s := "hello沙河"

	// byte 遍历
	for i := 0; i < len(s); i++ {
		fmt.Printf("%T %c  ", s[i], s[i])
	}

	fmt.Println()
	// rune 遍历
	for a, r := range s {  // 这里使用了迭代器
		fmt.Printf("%c %T %c  ", a, r, r)
	}

--因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出错误的字符

--字符串底层是一个byte数组,所以可以和[]byte类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。

5、修改字符串

--要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组。

--但这里统一希望大家改为 []rune

--代码示例:
    s := "hello沙河"

	// 使用 byte类型进行修改
	btye_list_s := []byte(s)
	// btye_list_s[0] = '离'  // 使用中文会报错
	btye_list_s[0] = 'w' // 使用中文会报错
	fmt.Println(string(btye_list_s))

	// 使用 rune类型进行修改
	rune_list_s := []rune(s)
	rune_list_s[0] = 'r'
	rune_list_s[1] = '离'  // 使用中文没事
	fmt.Println(string(rune_list_s))

6、强制类型转换

--go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

--强制类型转换的基本语法如下:
    --T(表达式)
    --其中,T表示要转换的类型。表达式包括变量、复杂算子和函数返回值等。

--代码示例:
    var a, b = 3, 4
	var c int
	// math.Sqrt()接收的参数是float64类型,需要强制转换
	c = int(math.Sqrt(float64(a*a + b*b)))
	fmt.Println(c)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值