gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/stringx/stringx.go (about) 1 package stringx 2 3 import ( 4 "math" 5 "regexp" 6 "strings" 7 "unicode" 8 ) 9 10 // CamelToUnderline 驼峰 to 下划线 11 func CamelToUnderline(target string) string { 12 return strings.Join(SplitUpper(target), "_") 13 } 14 15 // UnderlineToCamel 下划线 to 驼峰 16 func UnderlineToCamel(target string) string { 17 arr := strings.Split(target, "_") 18 for i, val := range arr { 19 arr[i] = UpperFirst(val) 20 } 21 return strings.Join(arr, "") 22 } 23 24 // 清楚空白的地方,包括空格,换行符,tab等 25 func CleanSpace(str string) string { 26 str = strings.ReplaceAll(str, " ", "") 27 str = strings.ReplaceAll(str, "\t", "") 28 str = strings.ReplaceAll(str, "\n", "") 29 str = strings.ReplaceAll(str, "\r", "") 30 return str 31 } 32 33 // Reverse 翻转字符串 34 func Reverse(str string) string { 35 l := len(str) 36 b := make([]byte, l) 37 for i, val := range []byte(str) { 38 b[l-i-1] = val 39 } 40 return string(b) 41 } 42 43 // SplitUpper 按照大小写分组 44 func SplitUpper(target string) []string { 45 chars := []byte(target) 46 result := []string{} 47 str := "" 48 for i := 0; i < len(target); i++ { 49 char := chars[i] 50 if i == 0 { 51 52 } else if char >= 65 && char <= 90 { 53 result = append(result, str) 54 str = "" 55 } 56 57 str += string(char) 58 } 59 60 result = append(result, str) 61 return result 62 } 63 64 // SplitLast 获取字符串被"."分离后的字符串数组中 65 // ,最后一个字符串。 66 func SplitLast(str string, sep string) string { 67 strArr := strings.Split(str, sep) 68 if strArr != nil && len(strArr) > 0 { 69 return strArr[len(strArr)-1] 70 } 71 72 return str 73 } 74 75 // IsLowerFirst 首字母是否小写 76 func IsLowerFirst(str string) bool { 77 first := str[0] 78 if first >= 97 && first <= 122 { 79 return true 80 } 81 return false 82 } 83 84 // IsUpperFirst 首字母是否大写 85 func IsUpperFirst(str string) bool { 86 first := str[0] 87 if first >= 65 && first <= 90 { 88 return true 89 } 90 return false 91 } 92 93 // FillFirst 填充直到长度 94 func FillFirst(str string, length int, char string) string { 95 lstr := len(str) 96 if lstr < length { 97 for i := lstr; i < length; i++ { 98 str = char + str 99 } 100 } 101 return str 102 } 103 104 // FillLast 填充直到长度 105 func FillLast(str string, length int, char string) string { 106 lstr := len(str) 107 if lstr < length { 108 for i := lstr; i < length; i++ { 109 str = str + char 110 } 111 } 112 return str 113 } 114 115 // LowerFirst 首字母小写 116 func LowerFirst(str string) string { 117 first := str[:1] 118 return strings.Replace(str, first, strings.ToLower(first), 1) 119 } 120 121 // UpperFirst 首字母大写 122 func UpperFirst(str string) string { 123 if len(str) == 0 { 124 return str 125 } 126 127 first := str[:1] 128 129 return strings.Replace(str, first, strings.ToUpper(first), 1) 130 } 131 132 // DeleteExtraSpace 删除字符串中多余的空格(含tab),有多个空格时,仅保留一个空格,同时将字符串中的tab换为空格 133 func DeleteExtraSpace(s string) string { 134 //删除字符串中的多余空格,有多个空格时,仅保留一个空格 135 s1 := strings.Replace(s, " ", " ", -1) //替换tab为空格 136 regstr := "\\s{2,}" //两个及两个以上空格的正则表达式 137 reg, _ := regexp.Compile(regstr) //编译正则表达式 138 s2 := make([]byte, len(s1)) //定义字符数组切片 139 copy(s2, s1) //将字符串复制到切片 140 spc_index := reg.FindStringIndex(string(s2)) //在字符串中搜索 141 for len(spc_index) > 0 { //找到适配项 142 s2 = append(s2[:spc_index[0]+1], s2[spc_index[1]:]...) //删除多余空格 143 spc_index = reg.FindStringIndex(string(s2)) //继续在字符串中搜索 144 } 145 return string(s2) 146 } 147 148 // GetStrLength 返回输入的字符串的字数,汉字和中文标点算 1 个字数,英文和其他字符 2 个算 1 个字数,不足 1 个算 1个 149 func GetStrLength(str string) float64 { 150 var total float64 151 152 reg := regexp.MustCompile("/·|,|。|《|》|‘|’|”|“|;|:|【|】|?|(|)|、/") 153 154 for _, r := range str { 155 if unicode.Is(unicode.Scripts["Han"], r) || reg.Match([]byte(string(r))) { 156 total = total + 1 157 } else { 158 total = total + 0.5 159 } 160 } 161 162 return math.Ceil(total) 163 }