util/string.go
2023-07-01 22:53:14 +08:00

204 lines
4.6 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 util...
//
// Description : 字符串相关的工具
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2021-03-09 6:00 下午
package util
import (
"crypto/md5"
"encoding/hex"
"math/rand"
"strings"
"time"
"github.com/axgle/mahonia"
)
var (
// LETTER_LIST 字母列表
LETTER_LIST = []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",
}
)
// stringOperate ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:09 2022/5/14
type stringOperate struct {
}
// GenRandom 获取随机长度的字符串
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:01 下午 2021/3/9
func (s *stringOperate) GenRandom(source string, length uint) string {
if length == 0 {
return ""
}
if len(source) == 0 {
//字符串为空,默认字符源为如下(去除易混淆的i/l):
source = "0123456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ"
}
strByte := []byte(source)
var genStrByte = make([]byte, 0)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < int(length); i++ {
genStrByte = append(genStrByte, strByte[r.Intn(len(strByte))])
}
return string(genStrByte)
}
// Md5 对字符串进行md5加密
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:01 下午 2021/3/9
func (s *stringOperate) Md5(str string) string {
h := md5.New()
_, _ = h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}
// Md5FromByte 从字节数组计算签名
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022/10/21 14:12:16
func (s *stringOperate) Md5FromByte(data []byte) string {
h := md5.New()
_, _ = h.Write(data)
return hex.EncodeToString(h.Sum(nil))
}
// GenRandomMd5 生成随机md5
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:11 2022/7/12
func (s *stringOperate) GenRandomMd5() string {
return s.Md5(s.GenRandom("", 16))
}
// SnakeCaseToCamel 蛇形字符串转换为驼峰
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 4:58 下午 2021/10/25
func (s *stringOperate) 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()
}
// Convert 字符串编码转换
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 14:38 2022/7/9
func (s *stringOperate) Convert(str string, sourceCode string, targetCode string) string {
sourceCoder := mahonia.NewDecoder(sourceCode)
sourceResult := sourceCoder.ConvertString(str)
targetCoder := mahonia.NewDecoder(targetCode)
_, cdata, _ := targetCoder.Translate([]byte(sourceResult), true)
return string(cdata)
}
// RemoveDuplicates 对列表数据去重
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 21:12 2022/7/23
func (s *stringOperate) RemoveDuplicates(sourceList []string) []string {
result := make([]string, 0)
hasDeal := make(map[string]bool)
if len(sourceList) == 0 {
return result
}
for _, val := range sourceList {
if _, exist := hasDeal[val]; exist {
continue
}
result = append(result, val)
hasDeal[val] = true
}
return result
}
// Map2Query map参数转换为url query
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:51 2022/10/10
func (s *stringOperate) Map2Query(data map[string]string) string {
list := make([]string, 0)
for k, v := range data {
list = append(list, k+"="+v)
}
return strings.Join(list, "&")
}
// ClearChar 清理指定字符
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:53 2023/1/13
func (s *stringOperate) ClearChar(src string, charList ...string) string {
if len(charList) == 0 {
return src
}
for _, item := range charList {
src = strings.ReplaceAll(src, item, "")
}
return src
}
// ReplaceChineseChar 替换常见的中文符号
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:59 2023/4/4
func (s *stringOperate) ReplaceChineseChar(str string) string {
charTable := map[string]string{
"": "(",
"": ")",
"": ":",
"": ",",
"。": ".",
"【": "]",
"】": "]",
}
for k, v := range charTable {
str = strings.ReplaceAll(str, k, v)
}
return str
}