跳到主要内容
版本:2.6.x

gstr 提供了强大便捷的文本处理组件,组件内置了大量常用的字符串处理方法,比较于 Golang 标准库更加全面丰富,可应对绝大部分业务场景。

使用方式

import "github.com/gogf/gf/v2/text/gstr"

接口文档

https://pkg.go.dev/github.com/gogf/gf/v2/text/gstr

以下常用方法列表,文档更新可能滞后于代码新特性,更多的方法及示例请参考代码文档: https://pkg.go.dev/github.com/gogf/gf/v2/text/gstr

字符串判断

IsNumeric

  • 说明:IsNumeric 验证字符串 s 是否为数字。

  • 格式:

IsNumeric(s string) bool
  • 示例:
func ExampleIsNumeric() {
fmt.Println(gstr.IsNumeric("88"))
fmt.Println(gstr.IsNumeric("3.1415926"))
fmt.Println(gstr.IsNumeric("abc"))
// Output:
// true
// true
// false
}

字符串长度

LenRune

  • 说明:LenRune 返回 unicode 字符串长度。

  • 格式:

LenRune(str string) int
  • 示例:
func ExampleLenRune() {
var (
str = `GoFrame框架`
result = gstr.LenRune(str)
)
fmt.Println(result)

// Output:
// 9
}

字符串创建

Repeat

  • 说明:Repeat 返回一个由 input 重复 multiplier 次后组成的新字符串。

  • 格式:

Repeat(input string, multiplier int) string
  • 示例:
func ExampleRepeat() {
var (
input = `goframe `
multiplier = 3
result = gstr.Repeat(input, multiplier)
)
fmt.Println(result)

// Output:
// goframe goframe goframe
}

大小写转换

ToLower

  • 说明:ToLowers 中所有 Unicode 字符都变为小写并返回其副本。

  • 格式:

ToLower(s string) string
  • 示例:
func ExampleToLower() {
var (
s = `GOFRAME`
result = gstr.ToLower(s)
)
fmt.Println(result)

// Output:
// goframe
}

ToUpper

  • 说明:ToUppers 中所有 Unicode 字符都变为大写并返回其副本。

  • 格式:

ToUpper(s string) string
  • 示例:
func ExampleToUpper() {
var (
s = `goframe`
result = gstr.ToUpper(s)
)
fmt.Println(result)

// Output:
// GOFRAME
}

UcFirst

  • 说明:UcFirsts 中首字符变为大写并返回其副本。

  • 格式:

UcFirst(s string) string
  • 示例:
func ExampleUcFirst() {
var (
s = `hello`
result = gstr.UcFirst(s)
)
fmt.Println(result)

// Output:
// Hello
}

LcFirst

  • 说明: LcFirsts 中首字符变为小写并返回其副本。

  • 格式:

LcFirst(s string) string
  • 示例:
func ExampleLcFirst() {
var (
str = `Goframe`
result = gstr.LcFirst(str)
)
fmt.Println(result)

// Output:
// goframe
}

UcWords

  • 说明: UcWords 将字符串 str 中每个单词的第一个字符变为大写。

  • 格式:

UcWords(str string) string
  • 示例:
func ExampleUcWords() {
var (
str = `hello world`
result = gstr.UcWords(str)
)
fmt.Println(result)

// Output:
// Hello World
}

IsLetterLower

  • 说明:IsLetterLower 验证给定的字符 b 是否是小写字符。

  • 格式:

IsLetterLower(b byte) bool
  • 示例:
func ExampleIsLetterLower() {
fmt.Println(gstr.IsLetterLower('a'))
fmt.Println(gstr.IsLetterLower('A'))

// Output:
// true
// false
}

IsLetterUpper

  • 说明:IsLetterUpper 验证字符 b 是否是大写字符。

  • 格式:

IsLetterUpper(b byte) bool
  • 示例:
func ExampleIsLetterUpper() {
fmt.Println(gstr.IsLetterUpper('A'))
fmt.Println(gstr.IsLetterUpper('a'))

// Output:
// true
// false
}

字符串比较

Compare

  • 说明:Compare 返回一个按字典顺序比较两个字符串的整数。 如果 a == b,结果为 0,如果 a < b,结果为 -1,如果 a > b,结果为 +1

  • 格式:

Compare(a, b string) int
  • 示例:
func ExampleCompare() {
fmt.Println(gstr.Compare("c", "c"))
fmt.Println(gstr.Compare("a", "b"))
fmt.Println(gstr.Compare("c", "b"))

// Output:
// 0
// -1
// 1
}

Equal

  • 说明: Equal 返回 ab 在不区分大小写的情况下是否相等。

  • 格式:

Equal(a, b string) bool
  • 示例:
func ExampleEqual() {
fmt.Println(gstr.Equal(`A`, `a`))
fmt.Println(gstr.Equal(`A`, `A`))
fmt.Println(gstr.Equal(`A`, `B`))

// Output:
// true
// true
// false
}

切分组合

Split

  • 说明:Splitdelimiterstr 拆分为 []string

  • 格式:

Split(str, delimiter string) []string
  • 示例:
func ExampleSplit() {
var (
str = `a|b|c|d`
delimiter = `|`
result = gstr.Split(str, delimiter)
)
fmt.Printf(`%#v`, result)

// Output:
// []string{"a", "b", "c", "d"}
}

SplitAndTrim

  • 说明:SplitAndTrim 使用 delimiterstr 拆分为 []string,并对 []string 的每个元素调用 Trim,并忽略在 Trim 之后为空的元素。

  • 格式:

SplitAndTrim(str, delimiter string, characterMask ...string) []string
  • 示例:
func ExampleSplitAndTrim() {
var (
str = `a|b|||||c|d`
delimiter = `|`
result = gstr.SplitAndTrim(str, delimiter)
)
fmt.Printf(`%#v`, result)

// Output:
// []string{"a", "b", "c", "d"}
}

Join

  • 说明: Joinarray 中的每一个元素连接并生成一个新的字符串。参数 sep 会作为新字符串的分隔符。

  • 格式:

Join(array []string, sep string) string
  • 示例:
func ExampleJoin() {
var (
array = []string{"goframe", "is", "very", "easy", "to", "use"}
sep = ` `
result = gstr.Join(array, sep)
)
fmt.Println(result)

// Output:
// goframe is very easy to use
}

JoinAny

  • 说明: JoinAnyarray 中的每一个元素连接并生成一个新的字符串。参数 sep 会作为新字符串的分隔符。参数 array 可以是任意的类型。

  • 格式:

JoinAny(array interface{}, sep string) string
  • 示例:
func ExampleJoinAny() {
var (
sep = `,`
arr2 = []int{99, 73, 85, 66}
result = gstr.JoinAny(arr2, sep)
)
fmt.Println(result)

// Output:
// 99,73,85,66
}

Explode

  • 说明: Explode 使用分隔符 delimiter 字符串 str 拆分成 []string

  • 格式:

Explode(delimiter, str string) []string
  • 示例:
func ExampleExplode() {
var (
str = `Hello World`
delimiter = " "
result = gstr.Explode(delimiter, str)
)
fmt.Printf(`%#v`, result)

// Output:
// []string{"Hello", "World"}
}

Implode

  • 说明: Implode 使用 glue 连接 pieces 字符串数组的每一个元素。

  • 格式:

Implode(glue string, pieces []string) string
  • 示例:
func ExampleImplode() {
var (
pieces = []string{"goframe", "is", "very", "easy", "to", "use"}
glue = " "
result = gstr.Implode(glue, pieces)
)
fmt.Println(result)

// Output:
// goframe is very easy to use
}

ChunkSplit

  • 说明:ChunkSplit 将字符串拆分为单位为 chunkLen 长度更小的每一份,并用 end 连接每一份拆分出的字符串。

  • 格式:

ChunkSplit(body string, chunkLen int, end string) string
  • 示例:
func ExampleChunkSplit() {
var (
body = `1234567890`
chunkLen = 2
end = "#"
result = gstr.ChunkSplit(body, chunkLen, end)
)
fmt.Println(result)

// Output:
// 12#34#56#78#90#
}

Fields

  • 说明: Fields[]string 的形式返回字符串中的每个单词。

  • 格式:

Fields(str string) []string
  • 示例:
func ExampleFields() {
var (
str = `Hello World`
result = gstr.Fields(str)
)
fmt.Printf(`%#v`, result)

// Output:
// []string{"Hello", "World"}
}

转义处理

AddSlashes

  • 说明: AddSlashes 将字符串中的符号前添加转义字符 '\'

  • 格式:

AddSlashes(str string) string
  • 示例:
func ExampleAddSlashes() {
var (
str = `'aa'"bb"cc\r\n\d\t`
result = gstr.AddSlashes(str)
)

fmt.Println(result)

// Output:
// \'aa\'\"bb\"cc\\r\\n\\d\\t
}

StripSlashes

  • 说明: StripSlashes 去掉字符串 str 中的转义字符 '\'

  • 格式:

StripSlashes(str string) string
  • 示例:
func ExampleStripSlashes() {
var (
str = `C:\\windows\\GoFrame\\test`
result = gstr.StripSlashes(str)
)
fmt.Println(result)

// Output:
// C:\windows\GoFrame\test
}

QuoteMeta

  • 说明:QuoteMeta 为str中' . \ + * ? [ ^ ] ( $ ) 中的每个字符前添加一个转义字符 '\'。

  • 格式:

QuoteMeta(str string, chars ...string) string
  • 示例:
func ExampleQuoteMeta() {
{
var (
str = `.\+?[^]()`
result = gstr.QuoteMeta(str)
)
fmt.Println(result)
}
{
var (
str = `https://goframe.org/pages/viewpage.action?pageId=1114327`
result = gstr.QuoteMeta(str)
)
fmt.Println(result)
}

// Output:
// \.\\\+\?\[\^\]\(\)
// https://goframe\.org/pages/viewpage\.action\?pageId=1114327

}

统计计数

Count

  • 说明:Count 计算 substrs 中出现的次数。  如果在 s 中没有找到 substr,则返回 0

  • 格式:

Count(s, substr string) int
  • 示例:
func ExampleCount() {
var (
str = `goframe is very, very easy to use`
substr1 = "goframe"
substr2 = "very"
result1 = gstr.Count(str, substr1)
result2 = gstr.Count(str, substr2)
)
fmt.Println(result1)
fmt.Println(result2)

// Output:
// 1
// 2
}

CountI

  • 说明:Count 计算 substrs 中出现的次数,不区分大小写。  如果在 s 中没有找到 substr,则返回 0

  • 格式:

CountI(s, substr string) int
  • 示例:
func ExampleCountI() {
var (
str = `goframe is very, very easy to use`
substr1 = "GOFRAME"
substr2 = "VERY"
result1 = gstr.CountI(str, substr1)
result2 = gstr.CountI(str, substr2)
)
fmt.Println(result1)
fmt.Println(result2)

// Output:
// 1
// 2
}

CountWords

  • 说明:CountWordsmap[string]int 的形式返回 str 中使用的单词的统计信息。

  • 格式:

CountWords(str string) map[string]int
  • 示例:
func ExampleCountWords() {
var (
str = `goframe is very, very easy to use!`
result = gstr.CountWords(str)
)
fmt.Printf(`%#v`, result)

// Output:
// map[string]int{"easy":1, "goframe":1, "is":1, "to":1, "use!":1, "very":1, "very,":1}
}

CountChars

  • 说明:CountCharsmap[string]int 的形式返回 str 中使用的字符的统计信息。 noSpace 参数可以控制是否计算空格。

  • 格式:

CountChars(str string, noSpace ...bool) map[string]int
  • 示例:
func ExampleCountChars() {
var (
str = `goframe`
result = gstr.CountChars(str)
)
fmt.Println(result)

// May Output:
// map[a:1 e:1 f:1 g:1 m:1 o:1 r:1]
}

数组处理

SearchArray

  • 说明:SearchArray[]string 'a' 中区分大小写地搜索字符串 's',返回其在 'a' 中的索引。 如果在 'a' 中没有找到 's',则返回 -1

  • 格式:

SearchArray(a []string, s string) int
  • 示例:
func ExampleSearchArray() {
var (
array = []string{"goframe", "is", "very", "nice"}
str = `goframe`
result = gstr.SearchArray(array, str)
)
fmt.Println(result)

// Output:
// 0
}

InArray

  • 说明:InArray校验 []string 'a' 中是否有字符串 ' s '

  • 格式:

InArray(a []string, s string) bool
  • 示例:
func ExampleInArray() {
var (
a = []string{"goframe", "is", "very", "easy", "to", "use"}
s = "goframe"
result = gstr.InArray(a, s)
)
fmt.Println(result)

// Output:
// true
}

PrefixArray

  • 说明: PrefixArray[]string array 的每一个字符串添加 'prefix' 的前缀。

  • 格式:

PrefixArray(array []string, prefix string)
  • 示例:
func ExamplePrefixArray() {
var (
strArray = []string{"tom", "lily", "john"}
)

gstr.PrefixArray(strArray, "classA_")

fmt.Println(strArray)

// Output:
// [classA_tom classA_lily classA_john]
}

命名转换

CaseCamel

  • 说明: CaseCamel 将字符串转换为大驼峰形式(首字母大写)。

  • 格式:

CaseCamel(s string) string
  • 示例:
func ExampleCaseCamel() {
var (
str = `hello world`
result = gstr.CaseCamel(str)
)
fmt.Println(result)

// Output:
// HelloWorld
}

CaseCamelLower

  • 说明: CaseCamelLower 将字符串转换为小驼峰形式(首字母小写)。

  • 格式:

CaseCamelLower(s string) string
  • 示例:
func ExampleCaseCamelLower() {
var (
str = `hello world`
result = gstr.CaseCamelLower(str)
)
fmt.Println(result)

// Output:
// helloWorld
}

CaseSnake

  • 说明: CaseSnake 将字符串转换中的符号(下划线,空格,点,中横线)用下划线( _ )替换,并全部转换为小写字母。

  • 格式:

CaseSnake(s string) string
  • 示例:
func ExampleCaseSnake() {
var (
str = `hello world`
result = gstr.CaseSnake(str)
)
fmt.Println(result)

// Output:
// hello_world
}

CaseSnakeScreaming

  • 说明: CaseSnakeScreaming 把字符串中的符号(下划线,空格,点,中横线),全部替换为下划线 '_',并将所有英文字母转为大写。

  • 格式:

CaseSnakeScreaming(s string) string
  • 示例:
func ExampleCaseSnakeScreaming() {
var (
str = `hello world`
result = gstr.CaseSnakeScreaming(str)
)
fmt.Println(result)

// Output:
// HELLO_WORLD
}

CaseSnakeFirstUpper

  • 说明: CaseSnakeFirstUpper 将字符串中的字母为大写时,将大写字母转换为小写字母并在其前面增加一个下划线 '_',首字母大写时,只转换为小写,前面不增加下划线 '_'

  • 格式:

CaseSnakeFirstUpper(word string, underscore ...string) string
  • 示例:
func ExampleCaseSnakeFirstUpper() {
var (
str = `RGBCodeMd5`
result = gstr.CaseSnakeFirstUpper(str)
)
fmt.Println(result)

// Output:
// rgb_code_md5
}

CaseKebab

  • 说明: CaseKebab 将字符串转换中的符号(下划线,空格,点,)用中横线 '-' 替换,并全部转换为小写字母。

  • 格式:

CaseKebab(s string) string
  • 示例:
func ExampleCaseKebab() {
var (
str = `hello world`
result = gstr.CaseKebab(str)
)
fmt.Println(result)

// Output:
// hello-world
}

CaseKebabScreaming

  • 说明: CaseKebabScreaming 将字符串转换中的符号(下划线,空格,点,中横线)用中横线 '-' 替换,并全部转换为大写字母。

  • 格式:

CaseKebabScreaming(s string) string
  • 示例:
func ExampleCaseKebabScreaming() {
var (
str = `hello world`
result = gstr.CaseKebabScreaming(str)
)
fmt.Println(result)

// Output:
// HELLO-WORLD
}

CaseDelimited

  • 说明: CaseDelimited 将字符串转换中的符号进行替换。

  • 格式:

CaseDelimited(s string, del byte) string
  • 示例:
func ExampleCaseDelimited() {
var (
str = `hello world`
del = byte('-')
result = gstr.CaseDelimited(str, del)
)
fmt.Println(result)

// Output:
// hello-world
}

CaseDelimitedScreaming

  • 说明: CaseDelimitedScreaming 将字符串中的符号(空格,下划线,点,中横线)用第二个参数进行替换,该函数第二个参数为替换的字符,第三个参数为大小写转换, true 为全部转换大写字母, false 为全部转为小写字母。

  • 格式:

CaseDelimitedScreaming(s string, del uint8, screaming bool) string
  • 示例:
func ExampleCaseDelimitedScreaming() {
{
var (
str = `hello world`
del = byte('-')
result = gstr.CaseDelimitedScreaming(str, del, true)
)
fmt.Println(result)
}
{
var (
str = `hello world`
del = byte('-')
result = gstr.CaseDelimitedScreaming(str, del, false)
)
fmt.Println(result)
}

// Output:
// HELLO-WORLD
// hello-world
}

包含判断

Contains

  • 说明: Contains 返回字符串 str 是否包含子字符串 substr,区分大小写。

  • 格式:

Contains(str, substr string) bool
  • 示例:
func ExampleContains() {
{
var (
str = `Hello World`
substr = `Hello`
result = gstr.Contains(str, substr)
)
fmt.Println(result)
}
{
var (
str = `Hello World`
substr = `hello`
result = gstr.Contains(str, substr)
)
fmt.Println(result)
}

// Output:
// true
// false
}

ContainsI

  • 说明:ContainsI 校验 substr 是否在 str 中,不区分大小写。

  • 格式:

ContainsI(str, substr string) bool
  • 示例:
func ExampleContainsI() {
var (
str = `Hello World`
substr = "hello"
result1 = gstr.Contains(str, substr)
result2 = gstr.ContainsI(str, substr)
)
fmt.Println(result1)
fmt.Println(result2)

// Output:
// false
// true
}

ContainsAny

  • 说明:ContainsAny 校验 s 中是否包含 chars

  • 格式:

ContainsAny(s, chars string) bool
  • 示例:
func ExampleContainsAny() {
{
var (
s = `goframe`
chars = "g"
result = gstr.ContainsAny(s, chars)
)
fmt.Println(result)
}
{
var (
s = `goframe`
chars = "G"
result = gstr.ContainsAny(s, chars)
)
fmt.Println(result)
}

// Output:
// true
// false
}

字符串转换

Chr

  • 说明:Chr 返回一个数字 0-255 对应的 ascii 字符串。

  • 格式:

Chr(ascii int) string
  • 示例:
func ExampleChr() {
var (
ascii = 65 // A
result = gstr.Chr(ascii)
)
fmt.Println(result)

// Output:
// A
}

Ord

  • 说明:Ord 将字符串的第一个字节转换为 0-255 之间的值。

  • 格式:

Ord(char string) int
  • 示例:
func ExampleOrd() {
var (
str = `goframe`
result = gstr.Ord(str)
)

fmt.Println(result)

// Output:
// 103
}

OctStr

  • 说明:OctStr 将字符串 str 中的八进制字符串转换为其原始字符串。

  • 格式:

OctStr(str string) string
  • 示例:
func ExampleOctStr() {
var (
str = `\346\200\241`
result = gstr.OctStr(str)
)
fmt.Println(result)

// Output:
// 怡
}

Reverse

  • 说明:Reverse 返回 str 的反转字符串。

  • 格式:

Reverse(str string) string
  • 示例:
func ExampleReverse() {
var (
str = `123456`
result = gstr.Reverse(str)
)
fmt.Println(result)

// Output:
// 654321
}

NumberFormat

  • 说明:NumberFormat 以千位分组来格式化数字。

    • 参数 decimal 设置小数点的个数。
    • 参数 decPoint 设置小数点的分隔符。
    • 参数 thousand 设置千位分隔符。
  • 格式:

NumberFormat(number float64, decimals int, decPoint, thousandsSep string) string
  • 示例:
func ExampleNumberFormat() {
var (
number float64 = 123456
decimals = 2
decPoint = "."
thousandsSep = ","
result = gstr.NumberFormat(number, decimals, decPoint, thousandsSep)
)
fmt.Println(result)

// Output:
// 123,456.00
}

Shuffle

  • 说明:Shuffle 返回将 str 随机打散后的字符串。

  • 格式:

Shuffle(str string) string
  • 示例:
func ExampleShuffle() {
var (
str = `123456`
result = gstr.Shuffle(str)
)
fmt.Println(result)

// May Output:
// 563214
}

HideStr

  • 说明: HideStr 将字符串 str 从中间字符开始,百分比 percent 的字符转换成 hide 字符串。

  • 格式:

HideStr(str string, percent int, hide string) string
  • 示例:
func ExampleHideStr() {
var (
str = `13800138000`
percent = 40
hide = `*`
result = gstr.HideStr(str, percent, hide)
)
fmt.Println(result)

// Output:
// 138****8000
}

Nl2Br

  • 说明:Nl2Br 在字符串中的所有换行符之前插入 HTML 换行符 (' br ' |<br />): \n\r, \r\n, \r, \n

  • 格式:

Nl2Br(str string, isXhtml ...bool) string
  • 示例:
func ExampleNl2Br() {
var (
str = `goframe
is
very
easy
to
use`
result = gstr.Nl2Br(str)
)

fmt.Println(result)

// Output:
// goframe<br>is<br>very<br>easy<br>to<br>use
}

WordWrap

  • 说明: WordWrap 使用换行符将 str 换行到给定字符数(不会切分单词)。

  • 格式:

WordWrap(str string, width int, br string) string
  • 示例:
func ExampleWordWrap() {
{
var (
str = `A very long woooooooooooooooooord. and something`
width = 8
br = "\n"
result = gstr.WordWrap(str, width, br)
)
fmt.Println(result)
}
{
var (
str = `The quick brown fox jumped over the lazy dog.`
width = 20
br = "<br />\n"
result = gstr.WordWrap(str, width, br)
)
fmt.Printf("%v", result)
}

// Output:
// A very
// long
// woooooooooooooooooord.
// and
// something
// The quick brown fox<br />
// jumped over the lazy<br />
// dog.
}

域名处理

IsSubDomain

  • 说明:IsSubDomain 校验 subDomain 是否为 mainDomain 的子域名。 支持 mainDomain 中的 '*'

  • 格式:

IsSubDomain(subDomain string, mainDomain string) bool
  • 示例:
func ExampleIsSubDomain() {
var (
subDomain = `s.goframe.org`
mainDomain = `goframe.org`
result = gstr.IsSubDomain(subDomain, mainDomain)
)
fmt.Println(result)

// Output:
// true
}


参数解析

Parse

  • 说明: Parse 解析字符串并以 map[string]interface{} 类型返回。

  • 格式:

Parse(s string) (result map[string]interface{}, err error)
  • 示例:
func ExampleParse() {
{
var (
str = `v1=m&v2=n`
result, _ = gstr.Parse(str)
)
fmt.Println(result)
}
{
var (
str = `v[a][a]=m&v[a][b]=n`
result, _ = gstr.Parse(str)
)
fmt.Println(result)
}
{
// The form of nested Slice is not yet supported.
var str = `v[][]=m&v[][]=n`
result, err := gstr.Parse(str)
if err != nil {
panic(err)
}
fmt.Println(result)
}
{
// This will produce an error.
var str = `v=m&v[a]=n`
result, err := gstr.Parse(str)
if err != nil {
println(err)
}
fmt.Println(result)
}
{
var (
str = `a .[[b=c`
result, _ = gstr.Parse(str)
)
fmt.Println(result)
}

// May Output:
// map[v1:m v2:n]
// map[v:map[a:map[a:m b:n]]]
// map[v:map[]]
// Error: expected type 'map[string]interface{}' for key 'v', but got 'string'
// map[]
// map[a___[b:c]
}

位置查找

Pos

  • 说明:Pos 返回 needlehaystack 中第一次出现的位置,区分大小写。 如果没有找到,则返回-1。

  • 格式:

Pos(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePos() {
var (
haystack = `Hello World`
needle = `World`
result = gstr.Pos(haystack, needle)
)
fmt.Println(result)

// Output:
// 6
}

PosRune

  • 说明: PosRune 的作用于函数 Pos 相似,但支持 haystackneedleunicode 字符串。

  • 格式:

PosRune(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosRune() {
var (
haystack = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
needle = `Go`
posI = gstr.PosRune(haystack, needle)
posR = gstr.PosRRune(haystack, needle)
)
fmt.Println(posI)
fmt.Println(posR)

// Output:
// 0
// 22
}

PosI

  • 说明:PosI 返回 needlehaystack 中第一次出现的位置,不区分大小写。 如果没有找到,则返回-1。

  • 格式:

PosI(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosI() {
var (
haystack = `goframe is very, very easy to use`
needle = `very`
posI = gstr.PosI(haystack, needle)
posR = gstr.PosR(haystack, needle)
)
fmt.Println(posI)
fmt.Println(posR)

// Output:
// 11
// 17
}

PosRuneI

  • 说明: PosRuneI 的作用于函数 PosI 相似,但支持 haystackneedleunicode 字符串。

  • 格式:

PosIRune(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosIRune() {
{
var (
haystack = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
needle = `高性能`
startOffset = 10
result = gstr.PosIRune(haystack, needle, startOffset)
)
fmt.Println(result)
}
{
var (
haystack = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
needle = `高性能`
startOffset = 30
result = gstr.PosIRune(haystack, needle, startOffset)
)
fmt.Println(result)
}

// Output:
// 14
// -1
}

PosR

  • 说明:PosR 返回 needlehaystack 中最后一次出现的位置,区分大小写。 如果没有找到,则返回-1。

  • 格式:

PosR(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosR() {
var (
haystack = `goframe is very, very easy to use`
needle = `very`
posI = gstr.PosI(haystack, needle)
posR = gstr.PosR(haystack, needle)
)
fmt.Println(posI)
fmt.Println(posR)

// Output:
// 11
// 17
}

PosRuneR

  • 说明: PosRuneR 的作用于函数 PosR 相似,但支持 haystackneedleunicode 字符串。

  • 格式:

PosRRune(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosRRune() {
var (
haystack = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
needle = `Go`
posI = gstr.PosIRune(haystack, needle)
posR = gstr.PosRRune(haystack, needle)
)
fmt.Println(posI)
fmt.Println(posR)

// Output:
// 0
// 22
}

PosRI

  • 说明:PosRI 返回 needlehaystack 中最后一次出现的位置,不区分大小写。 如果没有找到,则返回-1。

  • 格式:

PosRI(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosRI() {
var (
haystack = `goframe is very, very easy to use`
needle = `VERY`
posI = gstr.PosI(haystack, needle)
posR = gstr.PosRI(haystack, needle)
)
fmt.Println(posI)
fmt.Println(posR)

// Output:
// 11
// 17
}

PosRIRune

  • 说明:PosRIRune的作用于函数PosRI相似,但支持 haystackneedleunicode 字符串。

  • 格式:

PosRIRune(haystack, needle string, startOffset ...int) int
  • 示例:
func ExamplePosRIRune() {
var (
haystack = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架`
needle = `GO`
posI = gstr.PosIRune(haystack, needle)
posR = gstr.PosRIRune(haystack, needle)
)
fmt.Println(posI)
fmt.Println(posR)

// Output:
// 0
// 22
}

查找替换

Replace

  • 说明: Replace 返回 origin 字符串中, searchreplace 替换后的新字符串。 search 区分大小写。

  • 格式:

Replace(origin, search, replace string, count ...int) string
  • 示例:
func ExampleReplace() {
var (
origin = `golang is very nice!`
search = `golang`
replace = `goframe`
result = gstr.Replace(origin, search, replace)
)
fmt.Println(result)

// Output:
// goframe is very nice!
}

ReplaceI

  • 说明: ReplaceI 返回 origin 字符串中, searchreplace 替换后的新字符串。 search 不区分大小写。

  • 格式:

ReplaceI(origin, search, replace string, count ...int) string
  • 示例:
func ExampleReplaceI() {
var (
origin = `golang is very nice!`
search = `GOLANG`
replace = `goframe`
result = gstr.ReplaceI(origin, search, replace)
)
fmt.Println(result)

// Output:
// goframe is very nice!
}

ReplaceByArray

  • 说明:ReplaceByArray 返回 origin 被一个切片按两个一组 (search, replace) 顺序替换的新字符串,区分大小写。

  • 格式:

ReplaceByArray(origin string, array []string) string
  • 示例:
func ExampleReplaceByArray() {
{
var (
origin = `golang is very nice`
array = []string{"lang", "frame"}
result = gstr.ReplaceByArray(origin, array)
)
fmt.Println(result)
}
{
var (
origin = `golang is very good`
array = []string{"golang", "goframe", "good", "nice"}
result = gstr.ReplaceByArray(origin, array)
)
fmt.Println(result)
}

// Output:
// goframe is very nice
// goframe is very nice
}

ReplaceIByArray

  • 说明:ReplaceIByArray 返回 origin 被一个切片按两个一组 (search, replace) 顺序替换的新字符串,不区分大小写。

  • 格式:

ReplaceIByArray(origin string, array []string) string
  • 示例:
func ExampleReplaceIByArray() {
var (
origin = `golang is very Good`
array = []string{"Golang", "goframe", "GOOD", "nice"}
result = gstr.ReplaceIByArray(origin, array)
)

fmt.Println(result)

// Output:
// goframe is very nice
}

ReplaceByMap

  • 说明:ReplaceByMap 返回 originmapkey 替换为 value 的新字符串,区分大小写。

  • 格式:

ReplaceByMap(origin string, replaces map[string]string) string
  • 示例:
func ExampleReplaceByMap() {
{
var (
origin = `golang is very nice`
replaces = map[string]string{
"lang": "frame",
}
result = gstr.ReplaceByMap(origin, replaces)
)
fmt.Println(result)
}
{
var (
origin = `golang is very good`
replaces = map[string]string{
"golang": "goframe",
"good": "nice",
}
result = gstr.ReplaceByMap(origin, replaces)
)
fmt.Println(result)
}

// Output:
// goframe is very nice
// goframe is very nice
}

ReplaceIByMap

  • 说明:ReplaceIByMap 返回 originmapkey 替换为 value 的新字符串,不区分大小写。

  • 格式:

ReplaceIByMap(origin string, replaces map[string]string) string
  • 示例:
func ExampleReplaceIByMap() {
var (
origin = `golang is very nice`
replaces = map[string]string{
"Lang": "frame",
}
result = gstr.ReplaceIByMap(origin, replaces)
)
fmt.Println(result)

// Output:
// goframe is very nice
}

子串截取

Str

  • 说明: Str 返回从 needle 第一次出现的位置开始,到 haystack 结尾的字符串(包含 needle 本身)。

  • 格式:

Str(haystack string, needle string) string
  • 示例:
func ExampleStr() {
var (
haystack = `xxx.jpg`
needle = `.`
result = gstr.Str(haystack, needle)
)
fmt.Println(result)

// Output:
// .jpg
}

StrEx

  • 说明: StrEx 返回从 needle 第一次出现的位置开始,到 haystack 结尾的字符串(不包含 needle 本身)。

  • 格式:

StrEx(haystack string, needle string) string
  • 示例:
func ExampleStrEx() {
var (
haystack = `https://goframe.org/index.html?a=1&b=2`
needle = `?`
result = gstr.StrEx(haystack, needle)
)
fmt.Println(result)

// Output:
// a=1&b=2
}

StrTill

  • 说明: StrTill 返回从 haystack 字符串开始到 needle 第一次出现的位置的字符串(包含 needle 本身)。

  • 格式:

StrTill(haystack string, needle string) string
  • 示例:
func ExampleStrTill() {
var (
haystack = `https://goframe.org/index.html?test=123456`
needle = `?`
result = gstr.StrTill(haystack, needle)
)
fmt.Println(result)

// Output:
// https://goframe.org/index.html?
}

StrTillEx

  • 说明: StrTillEx 返回从 haystack 字符串开始到 needle 第一次出现的位置的字符串(不包含 needle 本身)。

  • 格式:

StrTillEx(haystack string, needle string) string
  • 示例:
func ExampleStrTillEx() {
var (
haystack = `https://goframe.org/index.html?test=123456`
needle = `?`
result = gstr.StrTillEx(haystack, needle)
)
fmt.Println(result)

// Output:
// https://goframe.org/index.html
}

SubStr

  • 说明:SubStr 返回字符串 strstart 开始,长度为 length 的新字符串。 参数 length 是可选的,它默认使用 str 的长度。

  • 格式:

SubStr(str string, start int, length ...int) (substr string)
  • 示例:
func ExampleSubStr() {
var (
str = `1234567890`
start = 0
length = 4
subStr = gstr.SubStr(str, start, length)
)
fmt.Println(subStr)

// Output:
// 1234
}

SubStrRune

  • 说明:SubStrRune 返回 unicode 字符串 strstart 开始,长度为 length 的新字符串。 参数 length 是可选的,它默认使用 str 的长度。

  • 格式:

SubStrRune(str string, start int, length ...int) (substr string)
  • 示例:
func ExampleSubStrRune() {
var (
str = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架。`
start = 14
length = 3
subStr = gstr.SubStrRune(str, start, length)
)
fmt.Println(subStr)

// Output:
// 高性能
}

StrLimit

  • 说明: StrLimitstr 字符串开始,长度为 length 的字符串,加上 suffix... 后返回新的字符串。

  • 格式:

StrLimit(str string, length int, suffix ...string) string
  • 示例:
func ExampleStrLimit() {
var (
str = `123456789`
length = 3
suffix = `...`
result = gstr.StrLimit(str, length, suffix)
)
fmt.Println(result)

// Output:
// 123...
}

StrLimitRune

  • 说明: StrLimitRuneunicode 字符串 str 开始,长度为 length 的字符串,加上 suffix... 后返回新的字符串。

  • 格式:

StrLimitRune(str string, length int, suffix ...string) string
  • 示例:
func ExampleStrLimitRune() {
var (
str = `GoFrame是一款模块化、高性能、企业级的Go基础开发框架。`
length = 17
suffix = "..."
result = gstr.StrLimitRune(str, length, suffix)
)
fmt.Println(result)

// Output:
// GoFrame是一款模块化、高性能...
}

SubStrFrom

  • 说明:SubStrFrom 返回字符串 str 从第一次出现 needstr 的结尾的字符串(包含 need)。

  • 格式:

SubStrFrom(str string, need string) (substr string)
  • 示例:
func ExampleSubStrFrom() {
var (
str = "我爱GoFrameGood"
need = `爱`
)

fmt.Println(gstr.SubStrFrom(str, need))

// Output:
// 爱GoFrameGood
}

SubStrFromEx

  • 说明:SubStrFromEx 返回字符串 str 从第一次出现 needstr 的结尾的字符串(不包含 need)。

  • 格式:

SubStrFromEx(str string, need string) (substr string)
  • 示例:
func ExampleSubStrFromEx() {
var (
str = "我爱GoFrameGood"
need = `爱`
)

fmt.Println(gstr.SubStrFromEx(str, need))

// Output:
// GoFrameGood
}

SubStrFromR

  • 说明:SubStrFromR 返回字符串 str 从最后一次出现 needstr 的结尾的字符串(包含 need)。

  • 格式:

SubStrFromR(str string, need string) (substr string)
  • 示例:
func ExampleSubStrFromR() {
var (
str = "我爱GoFrameGood"
need = `Go`
)

fmt.Println(gstr.SubStrFromR(str, need))

// Output:
// Good
}

SubStrFromREx

  • 说明:SubStrFromREx 返回字符串 str 从最后一次出现 needstr 的结尾的字符串(不包含 need)。

  • 格式:

SubStrFromREx(str string, need string) (substr string)
  • 示例:
func ExampleSubStrFromREx() {
var (
str = "我爱GoFrameGood"
need = `Go`
)

fmt.Println(gstr.SubStrFromREx(str, need))

// Output:
// od
}

字符/子串过滤

Trim

  • 说明: Trim 从字符串的开头和结尾剪切空白(或其他字符)。 可选参数 characterMask 指定额外剥离的字符。

  • 格式:

Trim(str string, characterMask ...string) string
  • 示例:
func ExampleTrim() {
var (
str = `*Hello World*`
characterMask = "*d"
result = gstr.Trim(str, characterMask)
)
fmt.Println(result)

// Output:
// Hello Worl
}

TrimStr

  • 说明:TrimStr 从字符串的开头和结尾去掉所有 cut 字符串(不会删除开头或结尾的空白)。

  • 格式:

TrimStr(str string, cut string, count ...int) string
  • 示例:
func ExampleTrimStr() {
var (
str = `Hello World`
cut = "World"
count = -1
result = gstr.TrimStr(str, cut, count)
)
fmt.Println(result)

// Output:
// Hello
}

TrimLeft

  • 说明:TrimLeft 将字符串开头的空格(或其他字符)删除。

  • 格式:

TrimLeft(str string, characterMask ...string) string
  • 示例:
func ExampleTrimLeft() {
var (
str = `*Hello World*`
characterMask = "*"
result = gstr.TrimLeft(str, characterMask)
)
fmt.Println(result)

// Output:
// Hello World*
}

TrimLeftStr

  • 说明:TrimLeftStr 从字符串的开头删除 countcut 字符串(不会删除开头的空格)。

  • 格式:

TrimLeftStr(str string, cut string, count ...int) string
  • 示例:
func ExampleTrimLeftStr() {
var (
str = `**Hello World**`
cut = "*"
count = 1
result = gstr.TrimLeftStr(str, cut, count)
)
fmt.Println(result)

// Output:
// *Hello World**
}

TrimRight

  • 说明: TrimRight 从字符串的末尾去掉空白(或其他字符)。

  • 格式:

TrimRight(str string, characterMask ...string) string
  • 示例:
func ExampleTrimRight() {
var (
str = `**Hello World**`
characterMask = "*def" // []byte{"*", "d", "e", "f"}
result = gstr.TrimRight(str, characterMask)
)
fmt.Println(result)

// Output:
// **Hello Worl
}

TrimRightStr

  • 说明:TrimRightStr 从字符串的尾部删除 countcut 字符串(不会删除尾部的空格)。

  • 格式:

TrimRightStr(str string, cut string, count ...int) string
  • 示例:
func ExampleTrimRightStr() {
var (
str = `Hello World!`
cut = "!"
count = -1
result = gstr.TrimRightStr(str, cut, count)
)
fmt.Println(result)

// Output:
// Hello World
}

TrimAll

  • 说明: TrimAll 删除字符串 str 中的所有空格(或其他字符)以及 characterMask 字符。

  • 格式:

TrimAll(str string, characterMask ...string) string
  • 示例:
func ExampleTrimAll() {
var (
str = `*Hello World*`
characterMask = "*"
result = gstr.TrimAll(str, characterMask)
)
fmt.Println(result)

// Output:
// HelloWorld
}

HasPrefix

  • 说明: HasPrefix 返回 s 是否以 prefix 开头。

  • 格式:

HasPrefix(s, prefix string) bool
  • 示例:
func ExampleHasPrefix() {
var (
s = `Hello World`
prefix = "Hello"
result = gstr.HasPrefix(s, prefix)
)
fmt.Println(result)

// Output:
// true
}

HasSuffix

  • 说明: HasSuffix 返回 s 是否以 suffix 结束。

  • 格式:

HasSuffix(s, suffix string) bool
  • 示例:
func ExampleHasSuffix() {
var (
s = `my best love is goframe`
prefix = "goframe"
result = gstr.HasSuffix(s, prefix)
)
fmt.Println(result)

// Output:
// true
}

版本比较

CompareVersion

  • 说明:CompareVersionab 作为标准 GNU 版本进行比较。

  • 格式:

CompareVersion(a, b string) int
  • 示例:
func ExampleCompareVersion() {
fmt.Println(gstr.CompareVersion("v2.11.9", "v2.10.8"))
fmt.Println(gstr.CompareVersion("1.10.8", "1.19.7"))
fmt.Println(gstr.CompareVersion("2.8.beta", "2.8"))

// Output:
// 1
// -1
// 0
}

CompareVersionGo

  • 说明: CompareVersionGoab 作为标准的 Golang 版本进行比较。

  • 格式:

CompareVersionGo(a, b string) int
  • 示例:
func ExampleCompareVersionGo() {
fmt.Println(gstr.CompareVersionGo("v2.11.9", "v2.10.8"))
fmt.Println(gstr.CompareVersionGo("v4.20.1", "v4.20.1+incompatible"))
fmt.Println(gstr.CompareVersionGo(
"v0.0.2-20180626092158-b2ccc119800e",
"v1.0.1-20190626092158-b2ccc519800e",
))

// Output:
// 1
// 1
// -1
}

相似计算

Levenshtein

  • 说明: Levenshtein 计算两个字符串之间的 Levenshtein 距离。

  • 格式:

Levenshtein(str1, str2 string, costIns, costRep, costDel int) int
  • 示例:
func ExampleLevenshtein() {
var (
str1 = "Hello World"
str2 = "hallo World"
costIns = 1
costRep = 1
costDel = 1
result = gstr.Levenshtein(str1, str2, costIns, costRep, costDel)
)
fmt.Println(result)

// Output:
// 2
}

SimilarText

  • 说明: SimilarText 计算两个字符串之间的相似度。

  • 格式:

SimilarText(first, second string, percent *float64) int
  • 示例:
func ExampleSimilarText() {
var (
first = `AaBbCcDd`
second = `ad`
percent = 0.80
result = gstr.SimilarText(first, second, &percent)
)
fmt.Println(result)

// Output:
// 2
}

Soundex

  • 说明: Soundex 用于计算字符串的 Soundex 键。

  • 格式:

Soundex(str string) string
  • 示例:
func ExampleSoundex() {
var (
str1 = `Hello`
str2 = `Hallo`
result1 = gstr.Soundex(str1)
result2 = gstr.Soundex(str2)
)
fmt.Println(result1, result2)

// Output:
// H400 H400
}