mirror of
https://github.com/pyihe/go-pkg.git
synced 2025-10-06 16:36:50 +08:00
style(go-pkg): rename package
This commit is contained in:
181
strings/strings.go
Normal file
181
strings/strings.go
Normal file
@@ -0,0 +1,181 @@
|
||||
package strings
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// Bytes string转换为[]byte
|
||||
func Bytes(s string) (b []byte) {
|
||||
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
|
||||
bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
|
||||
bh.Data, bh.Len, bh.Cap = sh.Data, sh.Len, sh.Len
|
||||
return b
|
||||
}
|
||||
|
||||
// Uint64 string转换为uint64
|
||||
func Uint64(s string) (uint64, error) {
|
||||
val, err := strconv.Atoi(s)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return uint64(val), nil
|
||||
}
|
||||
|
||||
// Int64 string转换为int64
|
||||
func Int64(s string) (int64, error) {
|
||||
val, err := strconv.Atoi(s)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return int64(val), nil
|
||||
}
|
||||
|
||||
// Int string转换为int
|
||||
func Int(s string) (int, error) {
|
||||
val, err := strconv.Atoi(s)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return val, err
|
||||
}
|
||||
|
||||
// Bool string转换为bool
|
||||
func Bool(s string) (bool, error) {
|
||||
return strconv.ParseBool(s)
|
||||
}
|
||||
|
||||
// Float32 string转换为float32
|
||||
func Float32(s string) (float32, error) {
|
||||
fv, err := strconv.ParseFloat(s, 32)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return float32(fv), nil
|
||||
}
|
||||
|
||||
// Float64 string转换为float64
|
||||
func Float64(s string) (float64, error) {
|
||||
return strconv.ParseFloat(s, 64)
|
||||
}
|
||||
|
||||
// Last 返回s中最后一个b的位置
|
||||
func Last(s string, b byte) int {
|
||||
i := len(s)
|
||||
for i--; i >= 0; i-- {
|
||||
if s[i] == b {
|
||||
break
|
||||
}
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
// IsEmpty 判断字符串本身或者去除空格后是否为空字符串
|
||||
func IsEmpty(s string) bool {
|
||||
if s == "" {
|
||||
return true
|
||||
}
|
||||
s = strings.TrimSpace(s)
|
||||
return s == ""
|
||||
}
|
||||
|
||||
// SliceEqual 判断两个字符串切片值是否相等
|
||||
func SliceEqual(a, b []string) bool {
|
||||
aLen, bLen := len(a), len(b)
|
||||
if aLen != bLen {
|
||||
return false
|
||||
}
|
||||
|
||||
if (a == nil) != (b == nil) {
|
||||
return false
|
||||
}
|
||||
|
||||
b = b[:aLen]
|
||||
for i, v := range a {
|
||||
if b[i] != v {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// Contain 判断字符串切片是否包含ele
|
||||
func Contain(ele string, s []string) bool {
|
||||
for _, v := range s {
|
||||
if v == ele {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Reverse 字符切片反转
|
||||
func Reverse(s []string) {
|
||||
l := len(s)
|
||||
for i := l/2 - 1; i >= 0; i-- {
|
||||
opp := l - i - 1
|
||||
s[i], s[opp] = s[opp], s[i]
|
||||
}
|
||||
}
|
||||
|
||||
// Remove 从s中删除第一个ele
|
||||
func Remove(ele string, s []string) {
|
||||
for i := range s {
|
||||
if s[i] == ele {
|
||||
s = append(s[:i], s[i+1:]...)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MaxSubStrLen 寻找最长不重复子串长度
|
||||
func MaxSubStrLen(str string) int {
|
||||
var maxLen int
|
||||
var start int
|
||||
m := make(map[rune]int)
|
||||
for i, ch := range []rune(str) {
|
||||
if lastIndex, ok := m[ch]; ok && lastIndex >= start {
|
||||
start = lastIndex + 1
|
||||
}
|
||||
if i-start+1 > maxLen {
|
||||
maxLen = i - start + 1
|
||||
}
|
||||
m[ch] = i
|
||||
}
|
||||
return maxLen
|
||||
}
|
||||
|
||||
// FilterRepeatBySlice 元素去重
|
||||
func FilterRepeatBySlice(slc []string) []string {
|
||||
var result []string
|
||||
for i := range slc {
|
||||
flag := true
|
||||
for j := range result {
|
||||
if slc[i] == result[j] {
|
||||
flag = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if flag {
|
||||
result = append(result, slc[i])
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// FilterRepeatByMap 通过map元素去重
|
||||
func FilterRepeatByMap(slc []string) []string {
|
||||
var result []string
|
||||
tempMap := make(map[string]byte, 0)
|
||||
for _, e := range slc {
|
||||
l := len(tempMap)
|
||||
tempMap[e] = 0
|
||||
if len(tempMap) != l {
|
||||
result = append(result, e)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
Reference in New Issue
Block a user