string.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package mhayaString
  2. import (
  3. "encoding/json"
  4. "math/rand"
  5. "strconv"
  6. goStrings "strings"
  7. )
  8. // CutLastString 截取字符串中最后一段,以@beginChar开始,@endChar结束的字符
  9. // @text 文本
  10. // @beginChar 开始
  11. func CutLastString(text, beginChar, endChar string) string {
  12. if text == "" || beginChar == "" || endChar == "" {
  13. return ""
  14. }
  15. textRune := []rune(text)
  16. beginIndex := goStrings.LastIndex(text, beginChar)
  17. endIndex := goStrings.LastIndex(text, endChar)
  18. if endIndex < 0 || endIndex < beginIndex {
  19. endIndex = len(textRune)
  20. }
  21. return string(textRune[beginIndex+1 : endIndex])
  22. }
  23. func IsBlank(value string) bool {
  24. return value == ""
  25. }
  26. func IsNotBlank(value string) bool {
  27. return value != ""
  28. }
  29. func ToUint(value string, def ...uint) (uint, bool) {
  30. val, err := strconv.ParseUint(value, 10, 32)
  31. if err != nil {
  32. if len(def) > 0 {
  33. return def[0], false
  34. }
  35. return 0, false
  36. }
  37. return uint(val), true
  38. }
  39. func ToUintD(value string, def ...uint) uint {
  40. val, _ := ToUint(value, def...)
  41. return val
  42. }
  43. func ToInt(value string, def ...int) (int, bool) {
  44. val, err := strconv.Atoi(value)
  45. if err != nil {
  46. if len(def) > 0 {
  47. return def[0], false
  48. }
  49. return 0, false
  50. }
  51. return val, true
  52. }
  53. func ToIntD(value string, def ...int) int {
  54. val, _ := ToInt(value, def...)
  55. return val
  56. }
  57. func ToInt32(value string, def ...int32) (int32, bool) {
  58. val, err := strconv.ParseInt(value, 10, 32)
  59. if err != nil {
  60. if len(def) > 0 {
  61. return def[0], false
  62. }
  63. return 0, false
  64. }
  65. return int32(val), true
  66. }
  67. func ToInt32D(value string, def ...int32) int32 {
  68. val, _ := ToInt32(value, def...)
  69. return val
  70. }
  71. func ToInt64(value string, def ...int64) (int64, bool) {
  72. val, err := strconv.ParseInt(value, 10, 64)
  73. if err != nil {
  74. if len(def) > 0 {
  75. return def[0], false
  76. }
  77. return 0, false
  78. }
  79. return val, true
  80. }
  81. func ToInt64D(value string, def ...int64) int64 {
  82. val, _ := ToInt64(value, def...)
  83. return val
  84. }
  85. func ToString(value interface{}) string {
  86. ret := ""
  87. if value == nil {
  88. return ret
  89. }
  90. switch t := value.(type) {
  91. case string:
  92. ret = t
  93. case int:
  94. ret = strconv.Itoa(t)
  95. case int32:
  96. ret = strconv.Itoa(int(t))
  97. case int64:
  98. ret = strconv.FormatInt(t, 10)
  99. case uint:
  100. ret = strconv.Itoa(int(t))
  101. case uint32:
  102. ret = strconv.Itoa(int(t))
  103. case uint64:
  104. ret = strconv.Itoa(int(t))
  105. default:
  106. v, _ := json.Marshal(t)
  107. ret = string(v)
  108. }
  109. return ret
  110. }
  111. func ToStringSlice(val []interface{}) []string {
  112. var result []string
  113. for _, item := range val {
  114. v, ok := item.(string)
  115. if ok {
  116. result = append(result, v)
  117. }
  118. }
  119. return result
  120. }
  121. func SplitIndex(s, sep string, index int) (string, bool) {
  122. ret := goStrings.Split(s, sep)
  123. if index >= len(ret) {
  124. return "", false
  125. }
  126. return ret[index], true
  127. }
  128. func GetRandString(num int) string {
  129. const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  130. b := make([]byte, num)
  131. for i := range b {
  132. b[i] = letterBytes[rand.Intn(len(letterBytes))]
  133. }
  134. return string(b)
  135. }