string字符串的操作

108 阅读3分钟

1.字符串的掐头去尾,包含判断

package main

import (
   "strings"

   "github.com/astaxie/beego/logs"
)

func init() {
   //打开文件名,行号支持
   logs.EnableFuncCallDepth(true)
   //log 源码包处于第 2 层级,这里调用会涨一个层级,所以: 设置为第 3 层级
   logs.SetLogFuncCallDepth(3)
   //输出到终端
   _ = logs.SetLogger("console")
}
func main() {

   //去掉字符串中指定的首个字符V
   s1 := "VV1.0.0"
   s1 = strings.TrimPrefix(s1, "V")
   logs.Info(s1)

   //去掉字符串中指定的一串字符V
   s2 := "VVVnV1.V0.0"
   s2 = strings.TrimLeft(s2, "V")
   logs.Info(s2)

   s1 = " aBc"
   s2 = "100a"
   s3 := s1 + s2 //" aBc100a"
   logs.Info(s3)
   logs.Info(strings.HasPrefix(s3, "a"))                                               //判断前缀
   logs.Info(strings.HasSuffix(s3, "a"))                                               //判断后缀
   logs.Info(strings.Contains(s3, "9"))                                                //字符串包含关系
   logs.Info("****************************", strings.Contains("V1.0.0-beta1", "beta")) //字符串包含关系
   logs.Info(strings.Index(s3, "0"))                                                   //判断子字符串或字符在父字符串中(首次)出现的位置
   logs.Info(strings.LastIndex(s3, "0"))                                               //判断子字符串或字符在父字符串中(最后)出现的位置

   //使用替换的时候要注意:比如像替换(I,ID)中前面的I为i,但替换的结果是(i,id)
   logs.Info(strings.Replace(s3, "0", "1", -1))        //如果 n = -1 (这里直接传了-1)则替换所有old为new
   logs.Info(strings.Count(s3, "0"))                   //出现次数
   logs.Info(strings.Repeat(s3, 2))                    //把字符串复制出新的一份加在原来后面
   logs.Info(strings.ToLower(s3))                      //修改字符串大小写
   logs.Info(strings.ToUpper(s3))                      //修改字符串大小写
   logs.Info(strings.TrimSpace(s3))                    //去掉开头和结尾空格
   logs.Info(strings.Trim(strings.TrimSpace(s3), "a")) //先去掉空格,再去掉开头和结尾字符串a

}
//2023/05/28 17:29:00.027 [I] [main.go:20]  V1.0.0
//2023/05/28 17:29:00.051 [I] [main.go:25]  nV1.V0.0
//2023/05/28 17:29:00.052 [I] [main.go:35]   aBc100a
//2023/05/28 17:29:00.052 [I] [main.go:36]  false
//2023/05/28 17:29:00.053 [I] [main.go:37]  true
//2023/05/28 17:29:00.053 [I] [main.go:38]  false
//2023/05/28 17:29:00.053 [I] [main.go:39]  **************************** true
//2023/05/28 17:29:00.054 [I] [main.go:40]  5
//2023/05/28 17:29:00.054 [I] [main.go:41]  6
//2023/05/28 17:29:00.055 [I] [main.go:44]   aBc111a
//2023/05/28 17:29:00.055 [I] [main.go:45]  2
//2023/05/28 17:29:00.055 [I] [main.go:46]   aBc100a aBc100a
//2023/05/28 17:29:00.056 [I] [main.go:47]   abc100a
//2023/05/28 17:29:00.056 [I] [main.go:48]   ABC100A
//2023/05/28 17:29:00.056 [I] [main.go:49]  aBc100a
//2023/05/28 17:29:00.057 [I] [main.go:50]  Bc100

2.string字符串的拼接

package main
import (
   "bytes"
   "fmt"
   "strings"
)
func main() {
   s1 := "Hello" + " " + "World"
   fmt.Println(s1)
   ss := []string{"Hello", "World"}
   //将字符串切片用指定字符拼接起来
   fmt.Println(strings.Join(ss, "."))
   ss = []string{
      "sh",
      "hn",
      "test",
   }
   var b strings.Builder
   //strings.Builder存放最终拼接好的字符串,一定程度上避免上面 str 每进行一次拼接操作就重新申请新的内存空间存放中间字符串的问题
   for _, s := range ss {
      //官方推荐的string拼接配合使用是WriteString()方法
      b.WriteString(s)
   }
   //相比bytes.Buffer优化了 string 和 []byte 之间的转换
   fmt.Println(b.String())
}
//Hello World
//Hello.World
//shhntest

3.string字符串中的每个字符读取

package main
import "fmt"
func main() {
   vv := "12"
   for _, v := range vv {
      fmt.Println(v)            //直接打印的是ascall码
      a := fmt.Sprintf("%c", v) //用格式转换后就是原来的字母了
      fmt.Println("****************", a)
   }
}

4.string字符串的零值与len()==0

func text() {
   var v string
   if v == "" {
      fmt.Println("string变量零值就是”“")//string变量零值就是”“
   }
   if len(v) == 0 {
      fmt.Println("string“”零值的长度就是0")//string“”零值的长度就是0
   }
}

5.string字符串的截取

func text() {
   //字符串截取的是一个字符时:输出的是ascll码
   //截取的是多个字符时:输出的是子串

   s := "Hello World!"
   fmt.Println(s[0]) //72
   fmt.Println(s[:]) //Hello World!

   temp := "outer|inner"
   k := strings.Split(temp, "|")
   fmt.Println(k[0], k) //outer [outer inner]

   te := "outer"
   ke := strings.Split(te, "|") //字符串中没有分割的成分,就是直接返回原字符串构造的切片
   fmt.Println(ke[0], ke)       //outer [outer]

   tem := "GBCAN"
   fmt.Println(len(strings.Split(tem, "_")), strings.Split(tem, "_")) //1 [GBCAN]
   
   demo1 := "I&love&Go,&and&I&also&love&Python."
   string_slice1 := strings.Split(demo1, "&") 

   demo2 := "&I&love&Go,&and&I&also&love&Python."
   string_slice2 := strings.Split(demo2, "&")

   fmt.Println("result:", string_slice1)//[I love Go, and I also love Python.]
   fmt.Printf("result:%#v,%s", string_slice2[0], string_slice2)//"",[ I love Go, and I also love Python.]

}