204 lines
4.6 KiB
Go
204 lines
4.6 KiB
Go
// 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
|
||
}
|