wrapper/string.go

1178 lines
24 KiB
Go
Raw Permalink 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 wrapper ...
//
// Description : wrapper ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2023-05-05 11:59
package wrapper
import (
"crypto/md5"
"encoding/hex"
"errors"
"git.zhangdeman.cn/zhangdeman/serialize"
"github.com/axgle/mahonia"
"io"
"math/rand"
"strings"
"time"
)
// StringFromRandom 从随机字符串生成String
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 14:50 2023/8/11
func StringFromRandom(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 < int(length); i++ {
genStrByte = append(genStrByte, strByte[r.Intn(len(strByte))])
}
return String(string(genStrByte))
}
// String 字符串类型包装
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:07 2023/5/5
type String string
// ToFloat32 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:26 2023/5/4
func (str String) ToFloat32() Float32Result {
var (
res Float32Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToFloat32Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 11:58 2023/5/16
func (str String) ToFloat32Ptr() Float32PtrResult {
res := str.ToFloat32()
if nil != res.Err {
return Float32PtrResult{
Value: nil,
Err: res.Err,
}
}
return Float32PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToFloat64 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:26 2023/5/4
func (str String) ToFloat64() Float64Result {
var (
res Float64Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToFloat64Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 11:59 2023/5/16
func (str String) ToFloat64Ptr() Float64PtrResult {
res := str.ToFloat64()
if nil != res.Err {
return Float64PtrResult{
Value: nil,
Err: res.Err,
}
}
return Float64PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToDouble 转double
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:33 2023/5/4
func (str String) ToDouble() Float64Result {
return str.ToFloat64()
}
// ToDoublePtr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 11:59 2023/5/16
func (str String) ToDoublePtr() Float64PtrResult {
return str.ToFloat64Ptr()
}
// ToNumber 转数字, 使用最高精度的float64
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:33 2023/5/4
func (str String) ToNumber() Float64Result {
return str.ToFloat64()
}
// ToNumberPtr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:00 2023/5/16
func (str String) ToNumberPtr() Float64PtrResult {
return str.ToFloat64Ptr()
}
// ToInt8 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:29 2023/5/4
func (str String) ToInt8() Int8Result {
var (
res Int8Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToInt8Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:01 2023/5/16
func (str String) ToInt8Ptr() Int8PtrResult {
res := str.ToInt8()
if nil != res.Err {
return Int8PtrResult{
Value: nil,
Err: res.Err,
}
}
return Int8PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToInt16 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:29 2023/5/4
func (str String) ToInt16() Int16Result {
var (
res Int16Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToInt16Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:02 2023/5/16
func (str String) ToInt16Ptr() Int16PtrResult {
res := str.ToInt16()
if nil != res.Err {
return Int16PtrResult{
Value: nil,
Err: res.Err,
}
}
return Int16PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToInt32 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:29 2023/5/4
func (str String) ToInt32() Int32Result {
var (
res Int32Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToInt32Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:03 2023/5/16
func (str String) ToInt32Ptr() Int32PtrResult {
res := str.ToInt32()
if nil != res.Err {
return Int32PtrResult{
Value: nil,
Err: res.Err,
}
}
return Int32PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToInt64 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:29 2023/5/4
func (str String) ToInt64() Int64Result {
var (
res Int64Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToInt64Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:03 2023/5/16
func (str String) ToInt64Ptr() Int64PtrResult {
res := str.ToInt64()
if nil != res.Err {
return Int64PtrResult{
Value: nil,
Err: res.Err,
}
}
return Int64PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToInt ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:47 2023/5/5
func (str String) ToInt() IntResult {
var (
res IntResult
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToIntPtr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:04 2023/5/16
func (str String) ToIntPtr() IntPtrResult {
res := str.ToInt()
if nil != res.Err {
return IntPtrResult{
Value: nil,
Err: res.Err,
}
}
return IntPtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToUint8 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:30 2023/5/4
func (str String) ToUint8() Uint8Result {
var (
res Uint8Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToUint8Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:05 2023/5/16
func (str String) ToUint8Ptr() Uint8PtrResult {
res := str.ToUint8()
if nil != res.Err {
return Uint8PtrResult{
Value: nil,
Err: res.Err,
}
}
return Uint8PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToUint16 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:29 2023/5/4
func (str String) ToUint16() Uint16Result {
var (
res Uint16Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToUint16Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:05 2023/5/16
func (str String) ToUint16Ptr() Uint16PtrResult {
res := str.ToUint16()
if nil != res.Err {
return Uint16PtrResult{
Value: nil,
Err: res.Err,
}
}
return Uint16PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToUint32 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:29 2023/5/4
func (str String) ToUint32() Uint32Result {
var (
res Uint32Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToUint32Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:05 2023/5/16
func (str String) ToUint32Ptr() Uint32PtrResult {
res := str.ToUint32()
if nil != res.Err {
return Uint32PtrResult{
Value: nil,
Err: res.Err,
}
}
return Uint32PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToUint64 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:29 2023/5/4
func (str String) ToUint64() Uint64Result {
var (
res Uint64Result
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToUint64Ptr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:06 2023/5/16
func (str String) ToUint64Ptr() Uint64PtrResult {
res := str.ToUint64()
if nil != res.Err {
return Uint64PtrResult{
Value: nil,
Err: res.Err,
}
}
return Uint64PtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToUint ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:29 2023/5/4
func (str String) ToUint() UintResult {
var (
res UintResult
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToUintPtr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:06 2023/5/16
func (str String) ToUintPtr() UintPtrResult {
res := str.ToUint()
if nil != res.Err {
return UintPtrResult{
Value: nil,
Err: res.Err,
}
}
return UintPtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToBool ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:34 2023/5/4
func (str String) ToBool() BoolResult {
var (
res BoolResult
)
res.Err = ConvertAssign(&res.Value, str)
return res
}
// ToBoolPtr ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:07 2023/5/16
func (str String) ToBoolPtr() BoolPtrResult {
res := str.ToBool()
if nil != res.Err {
return BoolPtrResult{
Value: nil,
Err: res.Err,
}
}
return BoolPtrResult{
Value: &res.Value,
Err: nil,
}
}
// ToStringPtr 转换成字符串指针
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:57 2023/7/3
func (str String) ToStringPtr() StringPtrResult {
val := str.Value()
return StringPtrResult{
Value: &val,
Err: nil,
}
}
// ToObject ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:35 2023/5/4
func (str String) ToObject() ObjectResult {
var (
res = ObjectResult{
Value: map[string]interface{}{},
Err: nil,
}
)
res.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &res.Value)
return res
}
// ToStruct ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:38 2023/5/4
func (str String) ToStruct(receiver interface{}) error {
if nil == receiver {
return errors.New("receiver is nil")
}
return serialize.JSON.UnmarshalWithNumber([]byte(str), receiver)
}
// ToInt8Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:55 2023/5/4
func (str String) ToInt8Slice(splitChar ...string) Int8SliceResult {
result := Int8SliceResult{
Value: []int8{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
var (
res = make([]int8, 0)
)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToInt8(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToInt16Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 19:01 2023/5/4
func (str String) ToInt16Slice(splitChar ...string) Int16SliceResult {
result := Int16SliceResult{
Value: []int16{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]int16, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToInt16(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToInt32Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 19:03 2023/5/4
func (str String) ToInt32Slice(splitChar ...string) Int32SliceResult {
result := Int32SliceResult{
Value: []int32{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]int32, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToInt32(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToInt64Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 19:04 2023/5/4
func (str String) ToInt64Slice(splitChar ...string) Int64SliceResult {
result := Int64SliceResult{
Value: []int64{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]int64, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToInt64(); nil != itemVal.Err {
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToIntSlice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 19:04 2023/5/4
func (str String) ToIntSlice(splitChar ...string) IntSliceResult {
result := IntSliceResult{
Value: []int{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]int, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToInt(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToUint8Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:50 2023/5/5
func (str String) ToUint8Slice(splitChar ...string) Uint8SliceResult {
result := Uint8SliceResult{
Value: []uint8{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]uint8, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToUint8(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToUint16Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:52 2023/5/5
func (str String) ToUint16Slice(splitChar ...string) Uint16SliceResult {
result := Uint16SliceResult{
Value: []uint16{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]uint16, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToUint16(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToUint32Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:53 2023/5/5
func (str String) ToUint32Slice(splitChar ...string) Uint32SliceResult {
result := Uint32SliceResult{
Value: []uint32{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]uint32, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToUint32(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToUint64Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:54 2023/5/5
func (str String) ToUint64Slice(splitChar ...string) Uint64SliceResult {
result := Uint64SliceResult{
Value: []uint64{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]uint64, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToUint64(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
return result
}
// ToUintSlice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:54 2023/5/5
func (str String) ToUintSlice(splitChar ...string) UintSliceResult {
result := UintSliceResult{
Value: []uint{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]uint, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToUint(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToBoolSlice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:55 2023/5/5
func (str String) ToBoolSlice(splitChar ...string) BoolSliceResult {
result := BoolSliceResult{
Value: []bool{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]bool, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToBool(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToFloat32Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:56 2023/5/5
func (str String) ToFloat32Slice(splitChar ...string) Float32SliceResult {
result := Float32SliceResult{
Value: []float32{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]float32, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToFloat32(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
return result
}
// ToFloat64Slice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:56 2023/5/5
func (str String) ToFloat64Slice(splitChar ...string) Float64SliceResult {
result := Float64SliceResult{
Value: []float64{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
res := make([]float64, 0)
arr := strings.Split(string(str), splitChar[0])
for _, item := range arr {
if itemVal := String(item).ToFloat64(); nil != itemVal.Err {
result.Err = itemVal.Err
return result
} else {
res = append(res, itemVal.Value)
}
}
result.Value = res
return result
}
// ToDoubleSlice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:57 2023/5/5
func (str String) ToDoubleSlice(splitChar ...string) Float64SliceResult {
return str.ToFloat64Slice(splitChar...)
}
// ToNumberSlice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:57 2023/5/5
func (str String) ToNumberSlice(splitChar ...string) Float64SliceResult {
return str.ToFloat64Slice(splitChar...)
}
// ToDuration 转换为时间格式
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:31 2023/9/4
func (str String) ToDuration(timeUnit time.Duration) DurationResult {
int64Val := str.ToInt64()
if nil != int64Val.Err {
return DurationResult{
Value: 0,
Err: int64Val.Err,
}
}
return Int(int64Val.Value).ToDuration(timeUnit)
}
// ToStringSlice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:11 2023/8/6
func (str String) ToStringSlice(splitChar ...string) StringSliceResult {
result := StringSliceResult{
Value: []string{},
Err: nil,
}
isSplit := len(splitChar) > 0
if !isSplit {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
result.Value = strings.Split(string(str), splitChar[0])
return result
}
// ToAnySlice ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:01 2023/5/5
func (str String) ToAnySlice(splitCharList ...string) AnySliceResult {
result := AnySliceResult{
Value: []interface{}{},
Err: nil,
}
if len(splitCharList) == 0 {
result.Err = serialize.JSON.UnmarshalWithNumber([]byte(str), &result.Value)
return result
}
valArr := strings.Split(str.Value(), splitCharList[0])
valList := make([]interface{}, 0)
for _, item := range valArr {
v := String(item)
if res := v.ToInt64(); nil == res.Err {
valList = append(valList, res.Value)
} else if res := v.ToUint64(); nil == res.Err {
valList = append(valList, res.Value)
} else if res := v.ToFloat64(); nil == res.Err {
valList = append(valList, res.Value)
} else if res := v.ToBool(); nil == res.Err {
valList = append(valList, res.Value)
} else {
valList = append(valList, item)
}
}
result.Value = valList
return result
}
// Md5 计算Md5值
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:08 2023/5/16
func (str String) Md5() StringResult {
h := md5.New()
_, err := io.WriteString(h, str.Value())
if nil != err {
return StringResult{
Value: "",
Err: err,
}
}
return StringResult{
Value: hex.EncodeToString(h.Sum(nil)),
Err: nil,
}
}
// Value ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 12:11 2023/5/16
func (str String) Value() string {
return string(str)
}
// GetLetterList 获取字母列表
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 14:53 2023/8/11
func (str String) 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 蛇形字符串转换为驼峰
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 4:58 下午 2021/10/25
func (str String) SnakeCaseToCamel() 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 (str String) Convert(sourceCode string, targetCode string) String {
sourceCoder := mahonia.NewDecoder(sourceCode)
sourceResult := sourceCoder.ConvertString(str.Value())
targetCoder := mahonia.NewDecoder(targetCode)
_, cdata, _ := targetCoder.Translate([]byte(sourceResult), true)
return String(string(cdata))
}
// ClearChar 清理指定字符
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 14:59 2023/8/11
func (str String) ClearChar(charList ...string) String {
if len(charList) == 0 {
return str
}
formatStr := str.Value()
for _, item := range charList {
formatStr = strings.ReplaceAll(formatStr, item, "")
}
return String(formatStr)
}
// ReplaceChineseChar 替换常见的中文符号
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:59 2023/4/4
func (str String) ReplaceChineseChar() String {
charTable := map[string]string{
"": "(",
"": ")",
"": ":",
"": ",",
"。": ".",
"【": "]",
"】": "]",
}
return str.ReplaceChar(charTable)
}
// ReplaceChar 替换指定字符
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:01 2023/8/11
func (str String) ReplaceChar(charTable map[string]string) String {
if len(charTable) == 0 {
return str
}
formatStr := str.Value()
for k, v := range charTable {
formatStr = strings.ReplaceAll(formatStr, k, v)
}
return String(formatStr)
}
// HasSubStr 是否包含指定的子串
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:37 2024/4/19
func (str String) HasSubStr(subStrList []string) bool {
if len(subStrList) == 0 {
return true
}
v := str.Value()
for _, item := range subStrList {
if strings.Contains(v, item) {
return true
}
}
return false
}