diff --git a/utils/str/string.go b/utils/str/string.go new file mode 100644 index 0000000..f68e71c --- /dev/null +++ b/utils/str/string.go @@ -0,0 +1,146 @@ +package str + +import ( + "net/url" + "strings" +) + +type String string + +func New(s string) *String { + return (*String)(&s) +} + +// String 返回字符串 +func (s *String) String() string { + return string(*s) +} + +// Append 追加字符串 +func (s *String) Append(str *String) *String { + *s = String(string(*s) + string(*str)) + return s +} + +// Join 以指定字符连接字符串 +func (s *String) Join(sep string) *String { + *s = String(strings.Join([]string{string(*s), sep}, "")) + return s +} + +// QueryEscape 对字符串进行 URL 编码 +func (s *String) QueryEscape() *String { + *s = String(strings.ReplaceAll(url.QueryEscape(string(*s)), "+", "%20")) + return s +} + +// Replace 替换字符串 +func (s *String) Replace(old, new string, n int) *String { + *s = String(strings.Replace(string(*s), old, new, n)) + return s +} + +// ReplaceAll 替换字符串 +func (s *String) ReplaceAll(old, new string) *String { + *s = String(strings.ReplaceAll(string(*s), old, new)) + return s +} + +// Trim 去除字符串两端的指定字符 +func (s *String) Trim(cs string) *String { + *s = String(strings.Trim(string(*s), cs)) + return s +} + +// TrimLeft 去除字符串左端的指定字符 +func (s *String) TrimLeft(cs string) *String { + *s = String(strings.TrimLeft(string(*s), cs)) + return s +} + +// TrimRight 去除字符串右端的指定字符 +func (s *String) TrimRight(cs string) *String { + *s = String(strings.TrimRight(string(*s), cs)) + return s +} + +// Default 返回字符串,如果字符串为空则返回默认值 +func (s *String) Default(def string) *String { + if string(*s) == "" { + *s = String(def) + } + return s +} + +// Format 格式化字符串 +func (s *String) Format(formatter func(s *String) *String) *String { + *s = *formatter(s) + return s +} + +// Index 返回字符串指定位置的字符 +func (s *String) Index(i int) String { + return String(string(*s)[i]) +} + +// Split 以指定字符分割字符串 +func (s *String) Split(sep string) *Strings { + slice := strings.Split(string(*s), sep) + ss := make(Strings, len(slice)) + for i, v := range slice { + ss[i] = New(v) + } + return &ss +} + +// SplitN 以指定字符分割字符串,最多分割 n 次 +func (s *String) SplitN(sep string, n int) *Strings { + slice := strings.SplitN(string(*s), sep, n) + ss := make(Strings, len(slice)) + for i, v := range slice { + ss[i] = New(v) + } + return &ss +} + +// ToUpper 将字符串转为大写 +func (s *String) ToUpper() *String { + *s = String(strings.ToUpper(string(*s))) + return s +} + +// ToLower 将字符串转为小写 +func (s *String) ToLower() *String { + *s = String(strings.ToLower(string(*s))) + return s +} + +// TrimSpace 去除字符串两端的空白字符 +func (s *String) TrimSpace() *String { + *s = String(strings.TrimSpace(string(*s))) + return s +} + +// TrimPrefix 去除字符串前缀 +func (s *String) TrimPrefix(prefix string) *String { + *s = String(strings.TrimPrefix(string(*s), prefix)) + return s +} + +// TrimSuffix 去除字符串后缀 +func (s *String) TrimSuffix(suffix string) *String { + *s = String(strings.TrimSuffix(string(*s), suffix)) + return s +} + +// TrimSpacePrefix 去除字符串两端的空白字符后再去除前缀 +func (s *String) TrimSpacePrefix(prefix string) *String { + *s = String(strings.TrimPrefix(strings.TrimSpace(string(*s)), prefix)) + return s +} + +// TrimSpaceSuffix 去除字符串两端的空白字符后再去除后缀 +func (s *String) TrimSpaceSuffix(suffix string) *String { + *s = String(strings.TrimSuffix(strings.TrimSpace(string(*s)), suffix)) + return s +} diff --git a/utils/str/string_test.go b/utils/str/string_test.go new file mode 100644 index 0000000..7ae95b8 --- /dev/null +++ b/utils/str/string_test.go @@ -0,0 +1,12 @@ +package str_test + +import ( + "github.com/kercylan98/minotaur/utils/str" + "testing" +) + +func TestString_ToLower(t *testing.T) { + var s str.String = "HELLO" + s.ToLower() + t.Log(s) +} diff --git a/utils/str/strings.go b/utils/str/strings.go new file mode 100644 index 0000000..1e32088 --- /dev/null +++ b/utils/str/strings.go @@ -0,0 +1,26 @@ +package str + +import "strings" + +type Strings []*String + +// Index 返回字符串指定位置的字符 +func (s *Strings) Index(i int) *String { + return (*s)[i] +} + +// Append 追加字符串 +func (s *Strings) Append(str *String) *Strings { + *s = append(*s, str) + return s +} + +// Join 以指定字符连接字符串 +func (s *Strings) Join(sep string) *String { + var ss []string + for _, v := range *s { + ss = append(ss, v.String()) + } + *s = append(*s, New(strings.Join(ss, sep))) + return (*s)[len(*s)-1] +}