
go字符串工具类
go
// Package strutil 提供字符串操作的工具函数,灵感来源于 Java 的 StringUtils。
package strutil
import (
"strings"
"unicode"
)
// IsEmpty 判断字符串是否为空(长度为 0)。
func IsEmpty(s string) bool {
return len(s) == 0
}
// IsNotEmpty 判断字符串是否非空。
func IsNotEmpty(s string) bool {
return len(s) > 0
}
// IsBlank 判断字符串是否为空或仅包含空白字符(如空格、制表符、换行符等)。
func IsBlank(s string) bool {
if len(s) == 0 {
return true
}
for _, r := range s {
if !unicode.IsSpace(r) {
return false
}
}
return true
}
// IsNotBlank 判断字符串是否非空且不只包含空白字符。
func IsNotBlank(s string) bool {
return !IsBlank(s)
}
// Equals 判断两个字符串是否相等(区分大小写)。
func Equals(s1, s2 string) bool {
return s1 == s2
}
// EqualsIgnoreCase 判断两个字符串是否相等(忽略大小写)。
func EqualsIgnoreCase(s1, s2 string) bool {
return strings.EqualFold(s1, s2)
}
// ToLowerCase 将字符串转换为小写。
// 如果输入为空字符串,则直接返回原字符串。
func ToLowerCase(s string) string {
if IsEmpty(s) {
return s
}
return strings.ToLower(s)
}
// ToUpperCase 将字符串转换为大写。
// 如果输入为空字符串,则直接返回原字符串。
func ToUpperCase(s string) string {
if IsEmpty(s) {
return s
}
return strings.ToUpper(s)
}
// Trim 去除字符串首尾的空白字符(包括空格、制表符、换行符等)。
func Trim(s string) string {
return strings.TrimSpace(s)
}
// TrimToEmpty 去除字符串首尾的空白字符。
// 即使结果为空,也返回空字符串 ""(Go 中字符串不能为 nil)。
func TrimToEmpty(s string) string {
return strings.TrimSpace(s)
}
// TrimToNil 去除字符串首尾的空白字符。
// 如果去除后结果为空或仅含空白,则返回空字符串 ""。
// 注意:Go 的 string 类型无法为 nil,因此“TrimToNil”在此语境下返回 "" 表示“无值”。
func TrimToNil(s string) string {
trimmed := strings.TrimSpace(s)
if IsBlank(trimmed) {
return ""
}
return trimmed
}
// Contains 判断字符串 s1 是否包含子串 s2(区分大小写)。
func Contains(s1, s2 string) bool {
return strings.Contains(s1, s2)
}
// ContainsIgnoreCase 判断字符串 s1 是否包含子串 s2(忽略大小写)。
func ContainsIgnoreCase(s1, s2 string) bool {
s1Lower := strings.ToLower(s1)
s2Lower := strings.ToLower(s2)
return strings.Contains(s1Lower, s2Lower)
}
// StartsWith 判断字符串 s 是否以指定前缀 prefix 开头(区分大小写)。
func StartsWith(s, prefix string) bool {
return strings.HasPrefix(s, prefix)
}
// StartsWithIgnoreCase 判断字符串 s 是否以指定前缀 prefix 开头(忽略大小写)。
func StartsWithIgnoreCase(s, prefix string) bool {
return strings.HasPrefix(strings.ToLower(s), strings.ToLower(prefix))
}
// EndsWith 判断字符串 s 是否以指定后缀 suffix 结尾(区分大小写)。
func EndsWith(s, suffix string) bool {
return strings.HasSuffix(s, suffix)
}
// EndsWithIgnoreCase 判断字符串 s 是否以指定后缀 suffix 结尾(忽略大小写)。
func EndsWithIgnoreCase(s, suffix string) bool {
return strings.HasSuffix(strings.ToLower(s), strings.ToLower(suffix))
}
// Join 使用指定分隔符 sep 拼接多个字符串元素。
func Join(sep string, elems ...string) string {
return strings.Join(elems, sep)
}
// DefaultIfEmpty 如果字符串 s 为空,则返回默认值 defaultStr;否则返回 s 本身。
func DefaultIfEmpty(s, defaultStr string) string {
if IsEmpty(s) {
return defaultStr
}
return s
}
// DefaultIfBlank 如果字符串 s 为空或仅包含空白字符,则返回默认值 defaultStr;否则返回 s 本身。
func DefaultIfBlank(s, defaultStr string) string {
if IsBlank(s) {
return defaultStr
}
return s
}
// Reverse 返回字符串的反转版本(支持 Unicode 字符)。
func Reverse(s string) string {
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
// ToFirstUpperASCII 将字符串首字母大写,其余小写,比如 HELLO -> Hello
func ToFirstUpperASCII(s string) string {
if len(s) == 0 {
return ""
}
return strings.ToUpper(s[:1]) + strings.ToLower(s[1:])
}测试
go
package main
import (
"fmt"
"your-module/strutil" // 替换为你的模块路径
)
func main() {
// 判空
fmt.Println(strutil.IsEmpty("")) // true
fmt.Println(strutil.IsBlank(" \t\n")) // true
fmt.Println(strutil.IsNotBlank(" hello ")) // true
// 比较
fmt.Println(strutil.Equals("Hello", "hello")) // false
fmt.Println(strutil.EqualsIgnoreCase("Hello", "hello")) // true
// 大小写
fmt.Println(strutil.ToLowerCase("HELLO")) // "hello"
fmt.Println(strutil.ToUpperCase("world")) // "WORLD"
// 去空格
fmt.Printf("[%s]\n", strutil.Trim(" abc ")) // [abc]
// 包含
fmt.Println(strutil.ContainsIgnoreCase("Hello World", "WORLD")) // true
// 默认值
fmt.Println(strutil.DefaultIfBlank("", "default")) // "default"
fmt.Println(strutil.DefaultIfBlank(" ", "default")) // "default"
fmt.Println(strutil.DefaultIfBlank("ok", "default")) // "ok"
// 反转
fmt.Println(strutil.Reverse("hello")) // "olleh"
// 拼接
fmt.Println(strutil.Join("-", "a", "b", "c")) // "a-b-c"
}
