mirror of
https://github.com/lzh-1625/go_process_manager.git
synced 2025-10-05 07:56:50 +08:00
update
This commit is contained in:
78
utils/str.go
Normal file
78
utils/str.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
var ansiEscapeRegex = regexp.MustCompile(`\x1b\[[0-9;]*[a-zA-Z]`)
|
||||
|
||||
func RemoveNotValidUtf8InString(s string) string {
|
||||
ret := s
|
||||
if !utf8.ValidString(s) {
|
||||
v := make([]rune, 0, len(s))
|
||||
for i, r := range s {
|
||||
if r == utf8.RuneError {
|
||||
_, size := utf8.DecodeRuneInString(s[i:])
|
||||
if size == 1 {
|
||||
continue
|
||||
}
|
||||
}
|
||||
v = append(v, r)
|
||||
}
|
||||
ret = string(v)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func RemoveANSI(input string) string {
|
||||
return ansiEscapeRegex.ReplaceAllString(input, "")
|
||||
}
|
||||
|
||||
func RandString(n int) (ret string) {
|
||||
allString := "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"
|
||||
ret = ""
|
||||
for i := 0; i < n; i++ {
|
||||
r := rand.Intn(len(allString))
|
||||
ret = ret + allString[r:r+1]
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type KVStr struct {
|
||||
m map[string]any
|
||||
}
|
||||
|
||||
func NewKVStr() *KVStr {
|
||||
return &KVStr{
|
||||
map[string]any{},
|
||||
}
|
||||
}
|
||||
|
||||
func (k *KVStr) Add(key string, value any) *KVStr {
|
||||
k.m[key] = value
|
||||
return k
|
||||
}
|
||||
|
||||
func (k *KVStr) Build() string {
|
||||
if len(k.m) == 0 {
|
||||
return "-"
|
||||
}
|
||||
keys := make([]string, 0, len(k.m))
|
||||
for key := range k.m {
|
||||
keys = append(keys, key)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
strList := make([]string, 0, len(k.m))
|
||||
for _, key := range keys {
|
||||
if k.m[key] == "" {
|
||||
continue
|
||||
}
|
||||
strList = append(strList, fmt.Sprintf("%s:%v", key, k.m[key]))
|
||||
}
|
||||
return strings.Join(strList, " , ")
|
||||
}
|
Reference in New Issue
Block a user