Files
wrapper/op_string/tool.go
2025-10-14 09:12:28 +08:00

155 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Package op_string ...
//
// Description : op_string ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2025-10-13 15:28
package op_string
import (
"crypto/md5"
"encoding/hex"
"io"
"math/rand"
"strings"
"time"
"git.zhangdeman.cn/zhangdeman/wrapper/define"
"github.com/spaolacci/murmur3"
)
// GetLetterList 获取字符列表
func GetLetterList() []string {
return []string{
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
}
}
// SnakeCaseToCamel 蛇形转驼峰
func SnakeCaseToCamel(str string) string {
if len(str) == 0 {
return ""
}
builder := strings.Builder{}
index := 0
if str[0] >= 'a' && str[0] <= 'z' {
builder.WriteByte(str[0] - ('a' - 'A'))
index = 1
}
for i := index; i < len(str); i++ {
if str[i] == '_' && i+1 < len(str) {
if str[i+1] >= 'a' && str[i+1] <= 'z' {
builder.WriteByte(str[i+1] - ('a' - 'A'))
i++
continue
}
}
// 将ID转为大写
if str[i] == 'd' && i-1 >= 0 && (str[i-1] == 'i' || str[i-1] == 'I') && (i+1 == len(str) || i+1 < len(str) && str[i+1] == '_') {
builder.WriteByte('d' - ('a' - 'A'))
continue
}
builder.WriteByte(str[i])
}
return builder.String()
}
// Md5 计算Md5值
func Md5(str string) define.StringResult {
h := md5.New()
_, err := io.WriteString(h, str)
if nil != err {
return define.StringResult{
Value: "",
Err: err,
}
}
return define.StringResult{
Value: hex.EncodeToString(h.Sum(nil)),
Err: nil,
}
}
// RandomMd5 生成随机字符串MD%值
func RandomMd5() define.StringResult {
str := Random(64, "")
return Md5(str)
}
// ClearChar 清理指定字符
func ClearChar(str string, charList ...string) string {
if len(charList) == 0 {
return str
}
for _, item := range charList {
str = strings.ReplaceAll(str, item, "")
}
return str
}
// ReplaceChineseChar 替换常见的中文符号
func ReplaceChineseChar(str string) string {
charTable := map[string]string{
"": "(",
"": ")",
"": ":",
"": ",",
"。": ".",
"【": "]",
"】": "]",
}
return ReplaceChar(str, charTable)
}
// ReplaceChar 替换指定字符
func ReplaceChar(str string, charTable map[string]string) string {
if len(charTable) == 0 {
return str
}
for k, v := range charTable {
str = strings.ReplaceAll(str, k, v)
}
return str
}
// HasSubStr 是否包含指定的子串
func HasSubStr(str string, subStrList []string) bool {
if len(subStrList) == 0 {
return true
}
for _, item := range subStrList {
if strings.Contains(str, item) {
return true
}
}
return false
}
// HashNumber 生成字符串哈希值
func HashNumber(str string) define.BaseValueResult[uint64] {
return define.BaseValueResult[uint64]{
Value: murmur3.Sum64([]byte(str)),
Err: nil,
}
}
// Random 生成随机字符串
func Random(length int, sourceCharList string) string {
if length == 0 {
return ""
}
if len(sourceCharList) == 0 {
//字符串为空,默认字符源为如下(去除易混淆的i/l):
sourceCharList = "0123456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ"
}
strByte := []byte(sourceCharList)
var genStrByte = make([]byte, 0)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < length; i++ {
genStrByte = append(genStrByte, strByte[r.Intn(len(strByte))])
}
return string(genStrByte)
}