goalng知识点-字符串

字符串类型

Go 语言中的字符串是一个字节切片。把内容放在双引号""之间,我们可以创建一个字符串。并且字符串是不可变的。
以下是一个简单的示例:

package main
 
import (
    "fmt"
)
 
func main() {
    name := "Hello World"
    fmt.Println(name)
}

Go 中的字符串是兼容 Unicode 编码的,并且使用 UTF-8 进行编码

字符串的操作

字符串的操作原则需要记住:
1)字符串是一个字节切片,所以我们可以获取字符串的每一个字节。
2)字符串是不可变的。

获取字符串的单个字节

使用for循环获取,每一个字节

package main
 
import (
    "fmt"
)
 
func printBytes(s string) {
    for i:= 0; i < len(s); i++ {
        fmt.Printf("%x ", s[i])      //使用16进制输出
        fmt.Printf("%c\n", s[i])       //使用字符打印输出
    }
}
 
func main() {
    name := "Hello World"
    printBytes(name)
    fmt.Printf("%c",name[1])   //输出e 
}
输出 
48  H
65  e
6c  l
6c  l
6f  o
20   
57  W
6f  o
72  r
6c  l
64  d


len(s) 返回字符串中字节的数量,然后我们用了一个 for 循环以 16 进制的形式打印这些字节。%x 格式限定符用于指定 16 进制编码。

字符串的 for range 循环

上面的程序是一种遍历字符串的好方法,但是 Go 给我们提供了一种更简单的方法来做到这一点:使用 for range 循环。runne是int32的别名,表示一个代码点(多字节)

package main
 
import (
    "fmt"
)
 
func printCharsAndBytes(s string) {
    for index, rune := range s {
        fmt.Printf("%c starts at byte %d\n", rune, index)
    }
}
 
func main() {
    name := "Señor"
    printCharsAndBytes(name)
}
输出:
S starts at byte 0  
e starts at byte 1  
ñ starts at byte 2
o starts at byte 4  
r starts at byte 5


在上面程序中的第8行,使用 for range 循环遍历了字符串。循环返回的是是当前 rune 的字节位置。程序的输出结果为:

字符串的拼接


func main() {
    name := "Hello World"
    //printBytes(name)
   fmt.Printf("%c",name[1])
   name = name + "aaa"    //直接拼接两个字符串,字符串不可更改。但字符串变量是能够被重新赋值。所以name是能够被赋值新的字符串常量的。
   fmt.Println(name)   //输出 Hello Worldaaa
 
}

其他更多操作

另外别的对于string更多的操作,使用strings包进行操作。

package main

import (
    "fmt"
    "strings"
)

func main() {
    s1 := " aBc"
    s2 := "100a"
    s3 := s1 + s2
    fmt.Println(s3)
    fmt.Println(strings.Contains(s3, "9"))  //字符串包含关系
    fmt.Println(strings.Index(s3, "0"))     //判断子字符串或字符在父字符串中出现的位置(索引)
    fmt.Println(strings.LastIndex(s3, "0")) //最后出现位置的索引
    fmt.Println(strings.ToLower(s3))//修改字符串大小写
    fmt.Println(strings.ToUpper(s3))//修改字符串大小写
    var splits = strings.Split("annbnnc", "nn")   //拆分字符串3
    var splits = strings.Split("a,b,c", ",")
    fmt.Println(strings.HasPrefix(s3, "a")) //判断前缀
    fmt.Println(strings.HasSuffix(s3, "0")) //判断后缀
    // n < 0 ,用 new 替换所有匹配上的 old;
    fmt.Println("n=-1: ", strings.Replace(s, old, new, n )) n=-1替换所有,n=0不替换,n=4 替换第4个old 
    str = strings.Replace(str, " ", "", -1)   //去除空格
    fmt.Println(strings.Count(s3,"0"))//出现的非重叠次数
    fmt.Println(strings.Repeat(s3,2))//重复字符串
    fmt.Println(strings.TrimSpace(s3))//修剪字符串 去掉开头和结尾空格
    fmt.Println(strings.Trim(strings.TrimSpace(s3),"a"))//修剪字符串 去掉开头和结尾字符串
}


小结:

  • 字符串是一个字节切片。字符串是一个常量,字符串值不可改变。
  • 字符串能被循环获取到每个字节。能够进行拼接、指定位置获取。因为属于字符切片。所以切片的特性和操作都是允许的。(除了修改东西)。基本的操作使用strings包。
  • 子字符串包含相关:是否包含、索引位置,最后索引位置。
  • 大小写转换
  • 拆分、去空格、替换字符串

转载于:https://my.oschina.net/u/4156317/blog/3070198

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值