-
Notifications
You must be signed in to change notification settings - Fork 121
/
StringUtil.go
executable file
·120 lines (107 loc) · 2.35 KB
/
StringUtil.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package libs
import (
"bytes"
"crypto/md5"
"encoding/hex"
"fmt"
"k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/util/json"
"strings"
"text/template"
"time"
)
/**
* Md5加密字符串
*/
func Md5Str(s string) string {
h := md5.New()
h.Write([]byte(s))
return hex.EncodeToString(h.Sum(nil))
}
// parse golang template
func ParseTemplate(templateStr string, data interface{}) (string, error) {
name := fmt.Sprintf("%d", time.Now().Nanosecond())
temp, err := template.New(name).Parse(templateStr)
if err != nil {
return "", err
}
content := make([]byte, 0)
buf := bytes.NewBuffer(content)
err = temp.Execute(buf, data)
if err != nil {
return "", err
}
return buf.String(), nil
}
/**
* 截取字符串
*/
func Substr(str string, start, length int) string {
rs := []rune(str)
rl := len(rs)
end := 0
if start < 0 {
start = rl - 1 + start
}
end = start + length
if start > end {
start, end = end, start
}
if start < 0 {
start = 0
}
if start > rl {
start = rl
}
if end < 0 {
end = 0
}
if end > rl {
end = rl
}
return string(rs[start:end])
}
// 字符串:下划线转驼峰
func TransToCamel(s string) string {
data := make([]byte, 0, len(s))
j := false
k := false
num := len(s) - 1
for i := 0; i <= num; i++ {
d := s[i]
if k == false && d >= 'A' && d <= 'Z' {
k = true
}
if d >= 'a' && d <= 'z' && (j || k == false) {
d = d - 32
j = false
k = true
}
if k && d == '_' && num > i && s[i+1] >= 'a' && s[i+1] <= 'z' {
j = true
continue
}
data = append(data, d)
}
return string(data[:])
}
// snake string, XxYy to xx_yy , XxYY to xx_yy
func TransToUnderline(s string) string {
data := make([]byte, 0, len(s)*2)
j := false
num := len(s)
for i := 0; i < num; i++ {
d := s[i]
if i > 0 && d >= 'A' && d <= 'Z' && j {
data = append(data, '_')
}
if d != '_' {
j = true
}
data = append(data, d)
}
return strings.ToLower(string(data[:]))
}
func JsonStr(v interface{}) string {
b, _ := json.Marshal(v)
return string(b)
}