string

package
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 23, 2026 License: BSD-2-Clause Imports: 3 Imported by: 0

README

util/string

字符串处理工具集,基于 lancet 库提供丰富的字符串操作功能。

特性

  • 命名转换:支持驼峰命名(CamelCase)、蛇形命名(SnakeCase)、短横线命名(KebabCase)之间的相互转换
  • 分割与连接:提供灵活的字符串分割与连接操作,支持去空格、移除空字符串等选项
  • 字符串修剪:去除字符串首尾的空白字符(空格、制表符、换行符等)
  • 查找与验证:检查子串存在性、前缀后缀匹配、字符类型验证(数字、字母、字母数字)
  • 替换与模板:支持字符串替换、模板替换、映射表批量替换
  • 截取与提取:按位置或长度截取子串,提取标记之间的内容
  • 格式化操作:字符串填充、对齐、大小写转换、反转等
  • 高级功能:汉明距离计算、字符串打乱、内容隐藏、省略号截断等

快速开始

导入包
import "github.com/lite-lake/litecore-go/util/string"
基本使用
// 使用默认实例
result := string.String.ToCamelCase("hello_world")
fmt.Println(result) // 输出: helloWorld

// 字符串分割与连接
parts := string.String.Split("a,b,c", ",")
fmt.Println(parts) // 输出: [a b c]

joined := string.String.Join([]string{"a", "b", "c"}, ",")
fmt.Println(joined) // 输出: a,b,c

// 字符串修剪
trimmed := string.String.Trim("  hello  ")
fmt.Println(trimmed) // 输出: hello

功能说明

命名转换

将不同命名风格的字符串进行相互转换。

// 转换为驼峰命名 (CamelCase)
camel := string.String.ToCamelCase("hello_world")
fmt.Println(camel) // 输出: helloWorld

camel = string.String.ToCamelCase("hello-world")
fmt.Println(camel) // 输出: helloWorld

// 转换为蛇形命名 (SnakeCase)
snake := string.String.ToSnakeCase("HelloWorld")
fmt.Println(snake) // 输出: hello_world

// 转换为大写蛇形命名
upperSnake := string.String.UpperSnakeCase("HelloWorld")
fmt.Println(upperSnake) // 输出: HELLO_WORLD

// 转换为短横线命名 (KebabCase)
kebab := string.String.ToKebabCase("HelloWorld")
fmt.Println(kebab) // 输出: hello-world

// 转换为大写短横线命名
upperKebab := string.String.UpperKebabCase("HelloWorld")
fmt.Println(upperKebab) // 输出: HELLO-WORLD
分割与连接

对字符串进行分割和连接操作。

// 基本分割
parts := string.String.Split("a,b,c", ",")
fmt.Println(parts) // 输出: [a b c]

// 基本连接
joined := string.String.Join([]string{"a", "b", "c"}, ",")
fmt.Println(joined) // 输出: a,b,c

// 分割并去除每个元素的首尾空白
trimmedParts := string.String.SplitAndTrim("a, b , c", ",")
fmt.Println(trimmedParts) // 输出: [a b c]

// 高级分割(可选择是否移除空字符串)
partsNoEmpty := string.String.SplitEx("a,,b,c", ",", true)
fmt.Println(partsNoEmpty) // 输出: [a b c]

// 按单词分割
words := string.String.SplitWords("hello  world test")
fmt.Println(words) // 输出: [hello world test]

// 连接字符串(length 参数会被忽略)
result := string.String.Concat(3, "a", "b", "c")
fmt.Println(result) // 输出: abc
字符串修剪

去除字符串首尾的空白字符。

// 去除两侧空白
trimmed := string.String.Trim("  hello  ")
fmt.Println(trimmed) // 输出: hello

// 去除左侧空白
trimmedLeft := string.String.TrimLeft("  hello  ")
fmt.Println(trimmedLeft) // 输出: hello

// 去除右侧空白
trimmedRight := string.String.TrimRight("  hello  ")
fmt.Println(trimmedRight) // 输出:   hello
查找与验证

检查字符串的属性和内容。

// 检查是否包含子串
contains := string.String.Contains("hello world", "world")
fmt.Println(contains) // 输出: true

// 检查是否包含任意一个子串
containsAny := string.String.ContainsAny("hello world", []string{"foo", "world", "bar"})
fmt.Println(containsAny) // 输出: true

// 检查是否包含所有子串
containsAll := string.String.ContainsAll("hello world", []string{"hello", "world"})
fmt.Println(containsAll) // 输出: true

// 检查前缀
hasPrefix := string.String.HasPrefix("hello world", "hello")
fmt.Println(hasPrefix) // 输出: true

// 检查后缀
hasSuffix := string.String.HasSuffix("hello world", "world")
fmt.Println(hasSuffix) // 输出: true

// 检查是否以任意一个前缀开头
hasPrefixAny := string.String.HasPrefixAny("hello.world", []string{"foo", "hello", "bar"})
fmt.Println(hasPrefixAny) // 输出: true

// 检查是否以任意一个后缀结尾
hasSuffixAny := string.String.HasSuffixAny("hello.world", []string{".com", ".world", ".org"})
fmt.Println(hasSuffixAny) // 输出: true

// 检查字符串是否为空
isEmpty := string.String.IsEmpty("")
fmt.Println(isEmpty) // 输出: true

// 检查字符串是否为空白(只包含空格、制表符等)
isBlank := string.String.IsBlank("   \t\n")
fmt.Println(isBlank) // 输出: true

// 检查是否只包含数字
isNumeric := string.String.IsNumeric("12345")
fmt.Println(isNumeric) // 输出: true

// 检查是否只包含字母
isAlpha := string.String.IsAlpha("hello")
fmt.Println(isAlpha) // 输出: true

// 检查是否只包含字母和数字
isAlphaNumeric := string.String.IsAlphaNumeric("hello123")
fmt.Println(isAlphaNumeric) // 输出: true
截取与提取

从字符串中提取特定部分。

// 按位置和长度截取子串
sub := string.String.SubString("hello world", 6, 5)
fmt.Println(sub) // 输出: world

// 提取两个标记之间的内容
between := string.String.SubBetween("hello [world] test", "[", "]")
fmt.Println(between) // 输出: world

// 获取子串第一次出现之前的部分
before := string.String.Before("hello.world.test", ".")
fmt.Println(before) // 输出: hello

// 获取子串第一次出现之后的部分
after := string.String.After("hello.world.test", ".")
fmt.Println(after) // 输出: world.test

// 获取子串最后一次出现之前的部分
beforeLast := string.String.BeforeLast("hello.world.test", ".")
fmt.Println(beforeLast) // 输出: hello.world

// 获取子串最后一次出现之后的部分
afterLast := string.String.AfterLast("hello.world.test", ".")
fmt.Println(afterLast) // 输出: test

// 提取所有匹配的内容
contents := string.String.ExtractContent("hello [world] test [example]", "[", "]")
fmt.Println(contents) // 输出: [world example]

// 查找所有出现位置
positions := string.String.FindAllOccurrences("hello world hello", "hello")
fmt.Println(positions) // 输出: [0 12]

// 从指定位置开始查找
index := string.String.IndexOffset("hello world hello", "hello", 6)
fmt.Println(index) // 输出: 12
大小写转换

转换字符串的大小写。

// 转换为大写
upper := string.String.Uppercase("hello")
fmt.Println(upper) // 输出: HELLO

// 转换为小写
lower := string.String.Lowercase("HELLO")
fmt.Println(lower) // 输出: hello

// 首字母大写(其余小写)
capitalized := string.String.Capitalize("hello")
fmt.Println(capitalized) // 输出: Hello

// 首字母大写(其余不变)
upperFirst := string.String.UpperFirst("hello world")
fmt.Println(upperFirst) // 输出: Hello world

// 首字母小写
lowerFirst := string.String.LowerFirst("Hello World")
fmt.Println(lowerFirst) // 输出: hello World
填充与对齐

对字符串进行填充和对齐操作。

// 左侧填充
paddedStart := string.String.PadStart("hello", 10, "*")
fmt.Println(paddedStart) // 输出: *****hello

// 右侧填充
paddedEnd := string.String.PadEnd("hello", 10, "*")
fmt.Println(paddedEnd) // 输出: hello*****

// 两侧填充
padded := string.String.Pad("hello", 11, "*")
fmt.Println(padded) // 输出: ***hello***
替换与模板

对字符串进行替换操作。

// 使用映射表替换
replaced := string.String.ReplaceWithMap("hello world", map[string]string{
    "hello": "hi",
    "world": "earth",
})
fmt.Println(replaced) // 输出: hi earth

// 模板替换(使用 {key} 作为占位符)
template := "Hello {name}, you are {age} years old"
data := map[string]string{
    "name": "John",
    "age":  "30",
}
result := string.String.TemplateReplace(template, data)
fmt.Println(result) // 输出: Hello {John}, you are {30} years old
格式化操作

对字符串进行各种格式化操作。

// 反转字符串
reversed := string.String.Reverse("hello")
fmt.Println(reversed) // 输出: olleh

// 统计单词数量
count := string.String.WordCount("hello world test")
fmt.Println(count) // 输出: 3

// 打乱字符串
shuffled := string.String.ShuffleString("hello")
fmt.Println(shuffled) // 输出: 随机排列,如 "olleh"

// 旋转字符串
rotated := string.String.Rotate("hello", 2)
fmt.Println(rotated) // 输出: lohel

// 移除空白字符(全部移除)
noSpace := string.String.RemoveWhiteSpace("hello world", true)
fmt.Println(noSpace) // 输出: helloworld

// 移除空白字符(合并为单个空格)
mergedSpace := string.String.RemoveWhiteSpace("hello   world", false)
fmt.Println(mergedSpace) // 输出: hello world

// 移除非打印字符
clean := string.String.RemoveNonPrintable("hello\x00world")
fmt.Println(clean) // 输出: helloworld

// 隐藏字符串部分内容
hidden := string.String.HideString("1234567890", 3, 6, "*")
fmt.Println(hidden) // 输出: 123***7890

// 添加省略号
ellipsis := string.String.Ellipsis("hello world", 5)
fmt.Println(ellipsis) // 输出: hello...

// 包装字符串
wrapped := string.String.Wrap("hello", "*")
fmt.Println(wrapped) // 输出: *hello*

// 解包字符串
unwrapped := string.String.Unwrap("*hello*", "*")
fmt.Println(unwrapped) // 输出: hello
高级功能

使用字符串的高级操作功能。

// 计算汉明距离(两个等长字符串的不同字符数)
distance, err := string.String.HammingDistance("hello", "hallo")
if err == nil {
    fmt.Println(distance) // 输出: 1
}

// 检查是否为字符串类型
isString := string.String.IsString("hello")
fmt.Println(isString) // 输出: true

isString = string.String.IsString(123)
fmt.Println(isString) // 输出: false

// 字符串转字节(零拷贝)
bytes := string.String.StringToBytes("hello")
fmt.Println(bytes) // 输出: [104 101 108 108 111]

// 字节转字符串(零拷贝)
str := string.String.BytesToString([]byte{104, 101, 108, 108, 111})
fmt.Println(str) // 输出: hello

API 参考

基础检查
函数 说明 返回值
IsEmpty(str string) bool 检查字符串是否为空 是否为空
IsNotEmpty(str string) bool 检查字符串是否不为空 是否不为空
IsBlank(str string) bool 检查字符串是否为空白 是否为空白
IsNotBlank(str string) bool 检查字符串是否不为空白 是否不为空白
修剪和分割
函数 说明 返回值
Trim(str string) string 去除字符串两端的空白字符 修剪后的字符串
TrimLeft(str string) string 去除字符串左端的空白字符 修剪后的字符串
TrimRight(str string) string 去除字符串右端的空白字符 修剪后的字符串
Split(str, sep string) []string 分割字符串 字符串数组
Join(elements []string, sep string) string 连接字符串数组 连接后的字符串
SplitAndTrim(str, delimiter string, characterMask ...string) []string 分割并去除每个元素的空白 字符串数组
子串操作
函数 说明 返回值
SubString(str string, offset int, length uint) string 截取子字符串 子字符串
SubBetween(str, start, end string) string 提取两个字符串之间的内容 提取的内容
Contains(str, substr string) bool 检查是否包含子字符串 是否包含
ContainsAny(str string, chars []string) bool 检查是否包含任意一个字符 是否包含
HasPrefix(str, prefix string) bool 检查是否以指定前缀开头 是否有前缀
HasSuffix(str, suffix string) bool 检查是否以指定后缀结尾 是否有后缀
大小写转换
函数 说明 返回值
Uppercase(str string) string 转换为大写 大写字符串
Lowercase(str string) string 转换为小写 小写字符串
Capitalize(str string) string 首字母大写,其余小写 首字母大写的字符串
UpperFirst(str string) string 首字母大写 首字母大写的字符串
LowerFirst(str string) string 首字母小写 首字母小写的字符串
命名转换
函数 说明 返回值
ToCamelCase(str string) string 转换为驼峰命名 驼峰命名字符串
ToKebabCase(str string) string 转换为短横线命名 短横线命名字符串
ToSnakeCase(str string) string 转换为下划线命名 下划线命名字符串
UpperSnakeCase(str string) string 转换为大写下划线命名 大写下划线命名字符串
UpperKebabCase(str string) string 转换为大写短横线命名 大写短横线命名字符串
填充和对齐
函数 说明 返回值
PadStart(str string, size int, padStr string) string 左侧填充字符 填充后的字符串
PadEnd(str string, size int, padStr string) string 右侧填充字符 填充后的字符串
Pad(str string, size int, padStr string) string 两侧填充字符 填充后的字符串
高级操作
函数 说明 返回值
Reverse(str string) string 反转字符串 反转后的字符串
WordCount(str string) int 统计单词数量 单词数
ShuffleString(str string) string 打乱字符串 打乱后的字符串
HammingDistance(a, b string) (int, error) 计算汉明距离 汉明距离和错误
位置和提取
函数 说明 返回值
Before(str, substr string) string 获取子串第一次出现之前的部分 之前的字符串
After(str, substr string) string 获取子串第一次出现之后的部分 之后的字符串
BeforeLast(str, substr string) string 获取子串最后一次出现之前的部分 之前的字符串
AfterLast(str, substr string) string 获取子串最后一次出现之后的部分 之后的字符串
验证
函数 说明 返回值
IsNumeric(str string) bool 检查是否只包含数字 是否为数字
IsAlpha(str string) bool 检查是否只包含字母 是否为字母
IsAlphaNumeric(str string) bool 检查是否只包含字母和数字 是否为字母数字
IsString(v any) bool 检查是否为字符串类型 是否为字符串
前缀后缀
函数 说明 返回值
HasPrefixAny(str string, prefixes []string) bool 检查是否以任意一个前缀开头 是否有前缀
HasSuffixAny(str string, suffixes []string) bool 检查是否以任意一个后缀结尾 是否有后缀
ContainsAll(str string, substrs []string) bool 检查是否包含所有子字符串 是否全部包含
分割和处理
函数 说明 返回值
SplitEx(str, sep string, removeEmptyString bool) []string 分割字符串,可选择是否移除空字符串 字符串数组
SplitWords(str string) []string 按单词分割字符串 单词数组
包装和替换
函数 说明 返回值
Wrap(str string, wrapWith string) string 用指定字符串包裹原字符串 包裹后的字符串
Unwrap(str string, wrapToken string) string 移除指定包裹字符串 解包后的字符串
Rotate(str string, shift int) string 旋转字符串 旋转后的字符串
RemoveWhiteSpace(str string, removeAll bool) string 移除空白字符 处理后的字符串
RemoveNonPrintable(str string) string 移除非打印字符 清理后的字符串
HideString(origin string, start, end int, replaceChar string) string 隐藏字符串部分内容 隐藏后的字符串
Ellipsis(str string, length int) string 添加省略号 处理后的字符串
TemplateReplace(template string, data map[string]string) string 模板替换 替换后的字符串
ReplaceWithMap(str string, replaces map[string]string) string 使用映射表替换 替换后的字符串
查找和提取
函数 说明 返回值
ExtractContent(str, start, end string) []string 提取所有标记之间的内容 提取的内容数组
FindAllOccurrences(str, substr string) []int 查找所有出现位置 位置数组
IndexOffset(str string, substr string, idxFrom int) int 从指定偏移量开始查找 位置(-1表示未找到)
连接和转换
函数 说明 返回值
Concat(length int, str ...string) string 连接字符串 连接后的字符串
StringToBytes(str string) []byte 字符串转字节(零拷贝) 字节数组
BytesToString(bytes []byte) string 字节转字符串(零拷贝) 字符串

注意事项

  1. 错误处理:大部分函数对于非法输入会返回空字符串或零值,不会返回错误。建议在使用前验证输入参数的有效性。
  2. 字符编码:所有函数都支持 UTF-8 编码,可以正确处理中文字符。
  3. 性能考虑StringToBytesBytesToString 函数使用零拷贝技术,性能优于标准库的转换方法。
  4. 模板语法TemplateReplace 函数使用 {key} 作为占位符,而非标准的 {{key}}
  5. 填充行为:填充函数在字符串长度已达到或超过指定长度时,不会进行截断,而是返回原字符串。
  6. 汉明距离HammingDistance 函数要求两个字符串长度相同,否则会返回错误。

测试

运行测试:

go test ./util/string

运行测试并查看覆盖率:

go test ./util/string -cover

依赖

许可证

本项目采用 MIT 许可证。

Documentation

Overview

Package string 字符串处理工具集,基于lancet库提供丰富的字符串操作功能

核心特性:

  • 字符串转换:支持驼峰命名(CamelCase)与蛇形命名(SnakeCase)互转
  • 字符串分割与连接:提供灵活的字符串拆分与合并操作
  • 字符串裁剪:去除首尾空格或指定字符
  • 字符串查找:检查子串是否存在,支持大小写敏感/不敏感
  • 字符串替换:支持全局或指定次数的字符串替换
  • 字符串截取:按位置或长度截取子串

基本用法:

// 驼峰命名与蛇形命名转换
camel := util.string.ToCamelCase("hello_world")  // "HelloWorld"
snake := util.string.ToSnakeCase("HelloWorld")   // "hello_world"

// 字符串分割与连接
parts := util.string.Split("a,b,c", ",")        // []string{"a", "b", "c"}
joined := util.string.Join([]string{"a", "b"}, ",")  // "a,b"

// 字符串裁剪
trimmed := util.string.Trim("  hello  ")         // "hello"

// 字符串查找
exists := util.string.Contains("hello", "ell")   // true

// 字符串替换
replaced := util.string.Replace("hello", "l", "x") // "hexxo"

// 字符串截取
sub := util.string.SubString("hello", 1, 3)      // "el"

错误处理: 该包中的函数通常不会返回错误,对于非法输入会返回空字符串或零值。 建议在使用前验证输入参数的有效性。

Index

Constants

This section is empty.

Variables

View Source
var String = &stringEngine{}

String 默认的字符串操作实例

Functions

This section is empty.

Types

type ILiteUtilString

type ILiteUtilString interface {
	// 基础检查
	IsEmpty(str string) bool
	IsNotEmpty(str string) bool
	IsBlank(str string) bool
	IsNotBlank(str string) bool

	// 修剪和分割
	Trim(str string) string
	TrimLeft(str string) string
	TrimRight(str string) string
	Split(str, sep string) []string
	Join(elements []string, sep string) string
	SplitAndTrim(str, delimiter string, characterMask ...string) []string

	// 子串操作
	SubString(str string, offset int, length uint) string
	SubBetween(str, start, end string) string
	Contains(str, substr string) bool
	ContainsAny(str string, chars []string) bool
	HasPrefix(str, prefix string) bool
	HasSuffix(str, suffix string) bool

	// 大小写转换
	Uppercase(str string) string
	Lowercase(str string) string
	Capitalize(str string) string
	UpperFirst(str string) string
	LowerFirst(str string) string

	// 命名转换
	ToCamelCase(str string) string
	ToKebabCase(str string) string
	ToSnakeCase(str string) string
	UpperSnakeCase(str string) string
	UpperKebabCase(str string) string

	// 填充和对齐
	PadStart(str string, size int, padStr string) string
	PadEnd(str string, size int, padStr string) string
	Pad(str string, size int, padStr string) string

	// 高级操作
	Reverse(str string) string
	WordCount(str string) int
	ShuffleString(str string) string
	HammingDistance(a, b string) (int, error)

	// 位置和提取
	Before(str, substr string) string
	After(str, substr string) string
	BeforeLast(str, substr string) string
	AfterLast(str, substr string) string

	// 验证
	IsNumeric(str string) bool
	IsAlpha(str string) bool
	IsAlphaNumeric(str string) bool
	IsString(v any) bool

	// 前缀后缀
	HasPrefixAny(str string, prefixes []string) bool
	HasSuffixAny(str string, suffixes []string) bool
	ContainsAll(str string, substrs []string) bool

	// 分割和处理
	SplitEx(str, sep string, removeEmptyString bool) []string
	SplitWords(str string) []string

	// 包装和替换
	Wrap(str string, wrapWith string) string
	Unwrap(str string, wrapToken string) string
	Rotate(str string, shift int) string
	RemoveWhiteSpace(str string, removeAll bool) string
	RemoveNonPrintable(str string) string
	HideString(origin string, start, end int, replaceChar string) string
	Ellipsis(str string, length int) string
	TemplateReplace(template string, data map[string]string) string
	ReplaceWithMap(str string, replaces map[string]string) string

	// 查找和提取
	ExtractContent(str, start, end string) []string
	FindAllOccurrences(str, substr string) []int
	IndexOffset(str string, substr string, idxFrom int) int

	// 连接和转换
	Concat(length int, str ...string) string
	StringToBytes(str string) []byte
	BytesToString(bytes []byte) string
}

ILiteUtilString 字符串工具接口

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL