string.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package mhayaString
  2. import (
  3. "encoding/json"
  4. "math/rand"
  5. "regexp"
  6. "strconv"
  7. goStrings "strings"
  8. )
  9. // CutLastString 截取字符串中最后一段,以@beginChar开始,@endChar结束的字符
  10. // @text 文本
  11. // @beginChar 开始
  12. func CutLastString(text, beginChar, endChar string) string {
  13. if text == "" || beginChar == "" || endChar == "" {
  14. return ""
  15. }
  16. textRune := []rune(text)
  17. beginIndex := goStrings.LastIndex(text, beginChar)
  18. endIndex := goStrings.LastIndex(text, endChar)
  19. if endIndex < 0 || endIndex < beginIndex {
  20. endIndex = len(textRune)
  21. }
  22. return string(textRune[beginIndex+1 : endIndex])
  23. }
  24. func IsBlank(value string) bool {
  25. return value == ""
  26. }
  27. func IsNotBlank(value string) bool {
  28. return value != ""
  29. }
  30. func ToUint(value string, def ...uint) (uint, bool) {
  31. val, err := strconv.ParseUint(value, 10, 32)
  32. if err != nil {
  33. if len(def) > 0 {
  34. return def[0], false
  35. }
  36. return 0, false
  37. }
  38. return uint(val), true
  39. }
  40. func ToUintD(value string, def ...uint) uint {
  41. val, _ := ToUint(value, def...)
  42. return val
  43. }
  44. func ToInt(value string, def ...int) (int, bool) {
  45. val, err := strconv.Atoi(value)
  46. if err != nil {
  47. if len(def) > 0 {
  48. return def[0], false
  49. }
  50. return 0, false
  51. }
  52. return val, true
  53. }
  54. func ToIntD(value string, def ...int) int {
  55. val, _ := ToInt(value, def...)
  56. return val
  57. }
  58. func ToInt32(value string, def ...int32) (int32, bool) {
  59. val, err := strconv.ParseInt(value, 10, 32)
  60. if err != nil {
  61. if len(def) > 0 {
  62. return def[0], false
  63. }
  64. return 0, false
  65. }
  66. return int32(val), true
  67. }
  68. func ToInt32D(value string, def ...int32) int32 {
  69. val, _ := ToInt32(value, def...)
  70. return val
  71. }
  72. func ToInt64(value string, def ...int64) (int64, bool) {
  73. val, err := strconv.ParseInt(value, 10, 64)
  74. if err != nil {
  75. if len(def) > 0 {
  76. return def[0], false
  77. }
  78. return 0, false
  79. }
  80. return val, true
  81. }
  82. func ToInt64D(value string, def ...int64) int64 {
  83. val, _ := ToInt64(value, def...)
  84. return val
  85. }
  86. func ToString(value interface{}) string {
  87. ret := ""
  88. if value == nil {
  89. return ret
  90. }
  91. switch t := value.(type) {
  92. case string:
  93. ret = t
  94. case int:
  95. ret = strconv.Itoa(t)
  96. case int32:
  97. ret = strconv.Itoa(int(t))
  98. case int64:
  99. ret = strconv.FormatInt(t, 10)
  100. case uint:
  101. ret = strconv.Itoa(int(t))
  102. case uint32:
  103. ret = strconv.Itoa(int(t))
  104. case uint64:
  105. ret = strconv.Itoa(int(t))
  106. default:
  107. v, _ := json.Marshal(t)
  108. ret = string(v)
  109. }
  110. return ret
  111. }
  112. func ToStringSlice(val []interface{}) []string {
  113. var result []string
  114. for _, item := range val {
  115. v, ok := item.(string)
  116. if ok {
  117. result = append(result, v)
  118. }
  119. }
  120. return result
  121. }
  122. func SplitIndex(s, sep string, index int) (string, bool) {
  123. ret := goStrings.Split(s, sep)
  124. if index >= len(ret) {
  125. return "", false
  126. }
  127. return ret[index], true
  128. }
  129. func GetRandString(num int) string {
  130. const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  131. b := make([]byte, num)
  132. for i := range b {
  133. b[i] = letterBytes[rand.Intn(len(letterBytes))]
  134. }
  135. return string(b)
  136. }
  137. // ConvertToBase58 将给定的整数转换为58进制的字符串表示。
  138. func ConvertToBase58(num int64) string {
  139. if num == 0 {
  140. return "1" // 0在58进制中表示为"1"
  141. }
  142. var result goStrings.Builder
  143. digits := "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" // 58进制的基数字符
  144. for num > 0 {
  145. remainder := num % 58
  146. result.WriteByte(digits[remainder])
  147. num /= 58
  148. }
  149. // 因为我们是从低位到高位构建的字符串,所以最终需要反转
  150. return reverseString(result.String())
  151. }
  152. // reverseString 反转字符串
  153. func reverseString(s string) string {
  154. runes := []rune(s)
  155. for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
  156. runes[i], runes[j] = runes[j], runes[i]
  157. }
  158. return string(runes)
  159. }
  160. const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  161. func RandStringBytes(n int) string {
  162. b := make([]byte, n)
  163. for i := range b {
  164. b[i] = letterBytes[rand.Intn(len(letterBytes))]
  165. }
  166. return string(b)
  167. }
  168. // ReplaceDigitsWithBase58 在字符串中替换所有的数字为58进制表示
  169. func ReplaceDigitsWithBase58(input string) string {
  170. re := regexp.MustCompile(`\d+`) // 匹配一个或多个数字
  171. return re.ReplaceAllStringFunc(input, func(match string) string {
  172. num, _ := strconv.ParseInt(match, 10, 64)
  173. return ConvertToBase58(num)
  174. })
  175. }