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

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"
}

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