GO字符串的相关操作

字符串常见功能

字符串属于在编程中是一种最常见用的数据类型,
在Go中也为字符串提供了很多常见的操作:

1、获取长度

package main

import (
   "fmt"
   "unicode/utf8"
)

func main() {
   var name string = "冯奎博客"

   fmt.Println( len(name) )                    // 获取 字节 长度,输出:12
   fmt.Println( utf8.RuneCountInString(name) ) // 获取字符长度,输出:4
}

2、是否以xx开头

package main

import (
   "fmt"
   "strings"
)

func main() {
   name := "冯奎博客"

   result := strings.HasPrefix(name, "冯")

   fmt.Println(result) // 输出:true
}

3、是否以xx结尾

package main

import (
    "fmt"
    "strings"
)

func main() {
    name := "冯奎博客"

    result := strings.HasSuffix(name, "客")

    fmt.Println(result) // 输出:true
}

4、是否包含

package main

import (
   "fmt"
   "strings"
)

func main() {
   name := "冯奎博客"
   result := strings.Contains(name, "奎")

   fmt.Println(result) // 输出:true
}

5、变大写

package main

import (
   "fmt"
   "strings"
)

func main() {
   name := "fengkuiboke"

   result := strings.ToUpper(name)

   fmt.Println(result) // 输出:FENGKUIBOKE
}
// 注意:result是大写;name依然是小写。

6、变小写

package main

import (
    "fmt"
    "strings"
)

func main() {
    name := "FENGKUIBOKE"

    result := strings.ToLower(name)

    fmt.Println(result) // 输出:fengkuiboke
}

7、去两边

package main

import (
   "fmt"
   "strings"
)

func main() {
   name := "fengkuiboke"

   result1 := strings.TrimRight(name, "ke") // 去除右边的ke
   result2 := strings.TrimLeft(name, "f")   // 去除左边的f
   result3 := strings.Trim(name, "f")       // 去除两边的f

   fmt.Println(result1, result2, result3) // 输出:fengkuibo engkuiboke engkuiboke
}

8、替换

package main

import (
   "fmt"
   "strings"
)

func main() {
   name := "fengkuikuiboke"

   result1 := strings.Replace(name, "kui", "IUK", 1)  // 找到kui替换为IUK,从左到右找第一个替换
   result2 := strings.Replace(name, "kui", "IUK", 2)  // 找到kui替换为IUK,从左到右找前两个替换
   result3 := strings.Replace(name, "kui", "IUK", -1) // 找到kui替换为IUK,替换所有

   fmt.Println(result1, result2, result3)

9、分割

package main

import (
   "fmt"
   "strings"
)

func main() {
   name := "抬老子的意大利的炮来"
   result := strings.Split(name, "的")

   // 根据`的`进行切割,获取一个切片(类似于一个数组)
   fmt.Println(result) // [ 抬老子, 意大利, 炮来 ]
}

10、拼接

可以使用 + 让两个字符串进行拼接,但这样的拼接效率会非常的低,不建议使用,建议大家使用以下的方式:

package main

import (
    "bytes"
    "fmt"
    "strings"
)

func main() {
    // 不建议
    message := "冯奎" + "博客"
    fmt.Println(message)

    // 建议:效率高一些
    dataList := []string{ "冯奎", "博客" }
    result := strings.Join(dataList, "")
    fmt.Println(result) // 冯奎博客

    // 建议:效率更高一些(go 1.10之前)
    var buffer bytes.Buffer
    buffer.WriteString("冯奎")
    buffer.WriteString("博客")
    data := buffer.String()
    fmt.Print(data)

    // 建议:效率更更更更高一些(go 1.10之后)
    var builder strings.Builder
    builder.WriteString("冯奎")
    builder.WriteString("博客")
    value := builder.String()
    fmt.Print(value)
}

11、string转换为int

package main

import (
    "fmt"
    "strconv"
)

func main() {
    num := "666"

    // 内部调用的就是 ParseInt
    var data, _ = strconv.Atoi(num)
    fmt.Println(data)

    // 整型转字符串(strconv.ParseInt 和 strconv.FormatInt 可用处理进制转换)
    // 十进制:整型; 其他进制:字符串形式 
    var result, err = strconv.ParseInt(num, 10, 32)
    fmt.Println(result, err)
}

12、int转换为string

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var result = strconv.Itoa(888)
    fmt.Println(result)
}

13、字符串 和 切片

package main

import (
    "fmt"
)

func main() {
    var name string = "冯奎博客"

    // 字符串转换为一个切片
    byteSet := []byte(name)
    fmt.Println(byteSet) // [229 134 175 229 165 142 229 141 154 229 174 162]

    // 字节的集合转换为字符串
    byteList := []byte{229, 134, 175, 229, 165, 142, 229, 141, 154, 229, 174, 162}
    targetString := string(byteList)
    fmt.Println(targetString)
}

14、字符串 和 rune切片

package main

import (
    "fmt"
    "strconv"
    // "unicode/utf8"
)

func main() {
    var name string = "冯奎博客"

    // 将字符串转换为 unicode字符集码点的集合   20911->冯 22862->奎 21338->博 23458->客
    tempSet := []rune(name)
    fmt.Println(tempSet) // [20911 22862 21338 23458]
    fmt.Println(tempSet[0], strconv.FormatInt(int64(tempSet[0]), 16))
    fmt.Println(tempSet[1], strconv.FormatInt(int64(tempSet[1]), 16))
    fmt.Println(tempSet[2], strconv.FormatInt(int64(tempSet[2]), 16))
    fmt.Println(tempSet[3], strconv.FormatInt(int64(tempSet[3]), 16))

    // "rune集合" 转换 为字符串
    runeList := []rune{20911, 22862, 21338, 23458}
    targetName := string(runeList)
    fmt.Println(targetName)
}

15、string 和 字符

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    // 数字转字符串
    v1 := string(65)
    fmt.Println(v1) // A

    v2 := string(20911)
    fmt.Println(v2) // 冯

    // 字符串转数字
    v3, size := utf8.DecodeRuneInString("A")
    fmt.Println(v3, size) // 65    1

    v4, size := utf8.DecodeRuneInString("冯")
    fmt.Println(v4, size) // 20911 3
}

冯奎博客
请先登录后发表评论
  • latest comments
  • 总共3条评论
冯奎博客

续断 :我又来催稿了~~

2021-10-09 15:50:06 回复

冯奎博客

续断 :加油,8月份的博文不要断了呀~

2021-08-26 12:02:09 回复

冯奎博客 冯奎博客

岁月清浅 安之若素 :好,等我忙完这段时间,会继续保持更新

2021-08-26 14:32:53 回复