gitee.com/curryzheng/dm@v0.0.1/util/zzu.go (about) 1 /* 2 * Copyright (c) 2000-2018, 达梦数据库有限公司. 3 * All rights reserved. 4 */ 5 6 package util 7 8 import ( 9 "bytes" 10 "runtime" 11 "strings" 12 "time" 13 "unicode" 14 ) 15 16 type stringutil struct{} 17 18 var StringUtil = &stringutil{} 19 20 /*----------------------------------------------------*/ 21 func (StringUtil *stringutil) LineSeparator() string { 22 var lineSeparator string 23 if strings.Contains(runtime.GOOS, "windos") { 24 lineSeparator = "\r\n" 25 } else if strings.Contains(runtime.GOOS, "mac") { 26 lineSeparator = "\r" 27 } else { 28 lineSeparator = "\n" 29 } 30 31 return lineSeparator 32 } 33 34 func (StringUtil *stringutil) Equals(str1 string, str2 string) bool { 35 return str1 == str2 36 } 37 38 func (StringUtil *stringutil) EqualsIgnoreCase(str1 string, str2 string) bool { 39 return strings.ToUpper(str1) == strings.ToUpper(str2) 40 } 41 42 func (StringUtil *stringutil) StartsWith(s string, subStr string) bool { 43 return strings.Index(s, subStr) == 0 44 } 45 46 func (StringUtil *stringutil) StartWithIgnoreCase(s string, subStr string) bool { 47 return strings.HasPrefix(strings.ToLower(s), strings.ToLower(subStr)) 48 } 49 50 func (StringUtil *stringutil) EndsWith(s string, subStr string) bool { 51 return strings.LastIndex(s, subStr) == len(s)-1 52 } 53 54 func (StringUtil *stringutil) IsDigit(str string) bool { 55 if str == "" { 56 return false 57 } 58 sz := len(str) 59 for i := 0; i < sz; i++ { 60 if unicode.IsDigit(rune(str[i])) { 61 continue 62 } else { 63 return false 64 } 65 } 66 return true 67 } 68 69 func (StringUtil *stringutil) FormatDir(dir string) string { 70 dir = strings.TrimSpace(dir) 71 if dir != "" { 72 if !StringUtil.EndsWith(dir, PathSeparator) { 73 dir += PathSeparator 74 } 75 } 76 return dir 77 } 78 79 func (StringUtil *stringutil) HexStringToBytes(s string) []byte { 80 str := s 81 82 bs := make([]byte, 0) 83 flag := false 84 85 str = strings.TrimSpace(str) 86 if strings.Index(str, "0x") == 0 || strings.Index(str, "0X") == 0 { 87 str = str[2:] 88 } 89 90 if len(str) == 0 { 91 return bs 92 } 93 94 var bsChr []byte 95 l := len(str) 96 97 if l%2 == 0 { 98 bsChr = []byte(str) 99 } else { 100 l += 1 101 bsChr = make([]byte, l) 102 bsChr[0] = '0' 103 for i := 0; i < l-1; i++ { 104 bsChr[i+1] = str[i] 105 } 106 } 107 108 bs = make([]byte, l/2) 109 110 pos := 0 111 for i := 0; i < len(bsChr); i += 2 { 112 bt := convertHex(bsChr[i]) 113 bt2 := convertHex(bsChr[i+1]) 114 if int(bt) == 0xff || int(bt2) == 0xff { 115 flag = true 116 break 117 } 118 119 bs[pos] = byte(bt*16 + bt2) 120 pos++ 121 } 122 123 if flag { 124 bs = ([]byte)(str) 125 } 126 127 return bs 128 } 129 130 func convertHex(chr byte) byte { 131 if chr >= '0' && chr <= '9' { 132 return chr - '0' 133 } else if chr >= 'a' && chr <= 'f' { 134 return chr - 'a' + 10 135 } else if chr >= 'A' && chr <= 'F' { 136 return chr - 'A' + 10 137 } else { 138 return 0xff 139 } 140 } 141 142 func (StringUtil *stringutil) BytesToHexString(bs []byte, pre bool) string { 143 if bs == nil { 144 return "" 145 } 146 if len(bs) == 0 { 147 return "" 148 } 149 150 hexDigits := "0123456789ABCDEF" 151 ret := new(strings.Builder) 152 for _, b := range bs { 153 ret.WriteByte(hexDigits[0x0F&(b>>4)]) 154 ret.WriteByte(hexDigits[0x0F&b]) 155 } 156 if pre { 157 return "0x" + ret.String() 158 } 159 return ret.String() 160 } 161 162 func (StringUtil *stringutil) ProcessSingleQuoteOfName(name string) string { 163 return StringUtil.processQuoteOfName(name, "'") 164 } 165 166 func (StringUtil *stringutil) ProcessDoubleQuoteOfName(name string) string { 167 return StringUtil.processQuoteOfName(name, "\"") 168 } 169 170 func (StringUtil *stringutil) processQuoteOfName(name string, quote string) string { 171 if quote == "" || name == "" { 172 return name 173 } 174 175 temp := name 176 result := bytes.NewBufferString("") 177 index := -1 178 quetoLength := len(quote) 179 index = strings.Index(temp, quote) 180 for index != -1 { 181 result.WriteString(temp[:index+quetoLength]) 182 result.WriteString(quote) 183 temp = temp[index+quetoLength:] 184 index = strings.Index(temp, quote) 185 } 186 result.WriteString(temp) 187 return result.String() 188 } 189 190 func (StringUtil *stringutil) FormatTime() string { 191 return time.Now().Format("2006-01-02 15:04:05") 192 } 193 194 func (StringUtil *stringutil) SubstringBetween(str string, open string, close string) string { 195 if str == "" { 196 return "" 197 } 198 199 iopen := -1 200 if open != "" { 201 iopen = strings.Index(str, open) 202 } 203 204 iclose := -1 205 if close != "" { 206 iclose = strings.LastIndex(str, close) 207 } 208 209 if iopen == -1 && iclose == -1 { 210 return "" 211 } else if iopen == -1 { 212 return str[0:iclose] 213 } else if iclose == -1 { 214 return str[iopen:] 215 } else { 216 return str[iopen:iclose] 217 } 218 }