Skip to content
鼓励作者:欢迎打赏犒劳

字符串

常用操作

包含

go
package main

import (
	"fmt"
	"strings"
)

func main() {
	var res bool

	// Contains 字符串A是否包含字符串B(相当于php中的strstr)
	str := "My name is Bob"
	res = strings.Contains(str, "name")
	fmt.Println(res) //true
}

拼接

go
package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "My name is Bob"
	// Join 字符串组合(相当于php中的join和implode)
	strs := []string{"My", "name", "is", "Bob"}
	str = strings.Join(strs, "#")
	fmt.Println(str) //My#name#is#Bob
}

分割

go
package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "My name is Bob"
	// Split 以指定分隔符拆分字符串(相当于php中的explode)
	strs2 := strings.Split(str, "#")
	fmt.Println(strs2) //[My name is Bob]
}

获取位置

go
package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "My name is Bob"
	// Index(相当于php中的strpos)
	i := strings.Index(str, "name") // 不包含子串返回-1,(php中不包含返回false)
	fmt.Println(i)                  //3
}

重复拼接

go
package main

import (
	"fmt"
	"strings"
)

func main() {
	// Repeat
	str2 := "Bob "
	str2 = strings.Repeat(str2, 4)
	fmt.Println(str2) //Bob Bob Bob Bob
}

去除空格

go
package main

import (
	"fmt"
	"strings"
)

func main() {
	str2 := "Bob "
	// Trim 去掉两头字符(相当于php中的trim,但没有默认的五空符)
	str2 = strings.Trim(str2, " ")
	fmt.Println(str2) // 字符串中最后的空格没有了  Bob
}

去除空格并分割转成切片

它主要用于将字符串按照空白字符分割成子字符串切片。

  • 去除字符串首尾的所有空白字符(空格、制表符、换行符等)
  • 按照一个或多个连续空白字符将字符串分割
  • 返回一个包含所有非空子字符串的切片
go
package main

import (
	"fmt"
	"strings"
)

func main() {
	// Fields 去掉空格之后,把元素放入切片中
	text := " Hello   world    this is   Go "
	words := strings.Fields(text)
	fmt.Printf("%#v , %T \n", words, words) //[]string{"Hello", "world", "this", "is", "Go"} , []string
}

字符串转换

Append

go
package main

import (
	"fmt"
	"strconv"
)

func main() {
	str := make([]byte, 0, 100)
	str = strconv.AppendInt(str, 4567, 10) //以10进制方式追加
	str = strconv.AppendBool(str, false)
	str = strconv.AppendQuote(str, "abcdefg")
	str = strconv.AppendQuoteRune(str, '')

	fmt.Println(string(str)) //4567false"abcdefg"'单'
}

其他类型的转换为字符串

Format 系列函数把其他类型的转换为字符串。

go
package main

import (
	"fmt"
	"strconv"
)

func main() {
	a := strconv.FormatBool(false)
	b := strconv.FormatInt(1234, 10)
	c := strconv.FormatUint(12345, 10)
	d := strconv.Itoa(1023)

	fmt.Println(a, b, c, d) //false 1234 12345 1023
}

字符串转其他类型

go
package main

import (
	"fmt"
	"strconv"
)

func checkError(e error) {
	if e != nil {
		fmt.Println(e)
	}
}
func main() {
	a, err := strconv.ParseBool("false")
	checkError(err)
	b, err := strconv.ParseFloat("123.23", 64)
	checkError(err)
	c, err := strconv.ParseInt("1234", 10, 64)
	checkError(err)
	d, err := strconv.ParseUint("12345", 10, 64)
	checkError(err)
	e, err := strconv.Atoi("1023")
	checkError(err)
	fmt.Println(a, b, c, d, e) //false 123.23 1234 12345 1023
}

正则表达式

基本用法

其实也很简单,只不过有两种写法,一个是FindAllString , 一个是FindAllStringSubmatch , 后者比前者多了一个功能,就是当有组的概念的时候, 切片第一个元素是匹配的全部内容,第二个元素是组内的内容。看个例子就知道。

go
package main

import (
	"fmt"
	"regexp"
)

func main() {
	context1 := "3.14 123123 .68 haha 1.0 abc 6.66 123."

	//MustCompile解析并返回一个正则表达式。如果成功返回,该Regexp就可用于匹配文本。
	// \d 匹配数字[0-9],d+ 重复>=1次匹配d,越多越好(优先重复匹配d)
	exp1 := regexp.MustCompile(`\d+\.\d+`)
	
	//返回保管正则表达式所有不重叠的匹配结果的[]string切片。如果没有匹配到,会返回nil。-1表示匹配全部
	//result1 := exp1.FindAllString(context1, -1) //[3.14 1.0 6.66]
	result1 := exp1.FindAllStringSubmatch(context1, -1) //[[3.14] [1.0] [6.66]]

	fmt.Printf("%v\n", result1)
	fmt.Printf("\n------------------------------------\n\n")
	
	context2 := `
<title>标题</title>
<div>你过来啊</div>
<div>hello mike</div>
<div>你大爷</div>
<body>呵呵</body>
`
	//(.*?)被括起来的表达式作为分组
	//匹配<div>xxx</div>模式的所有子串
	exp2 := regexp.MustCompile(`<div>(.*?)</div>`)
	result2 := exp2.FindAllStringSubmatch(context2, -1)

	//[[<div>你过来啊</div> 你过来啊] [<div>hello mike</div> hello mike] [<div>你大爷</div> 你大爷]]
	fmt.Printf("%v\n", result2)
	fmt.Printf("\n------------------------------------\n\n")
}

如有转载或 CV 的请标注本站原文地址