| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- /*
- * Copyright (c) 2000-2018, 达梦数据库有限公司.
- * All rights reserved.
- */
- package util
- import (
- "bytes"
- "runtime"
- "strings"
- "time"
- "unicode"
- )
- type stringutil struct{}
- var StringUtil = &stringutil{}
- /*----------------------------------------------------*/
- func (StringUtil *stringutil) LineSeparator() string {
- var lineSeparator string
- if strings.Contains(runtime.GOOS, "windos") {
- lineSeparator = "\r\n"
- } else if strings.Contains(runtime.GOOS, "mac") {
- lineSeparator = "\r"
- } else {
- lineSeparator = "\n"
- }
- return lineSeparator
- }
- func (StringUtil *stringutil) Equals(str1 string, str2 string) bool {
- return str1 == str2
- }
- func (StringUtil *stringutil) EqualsIgnoreCase(str1 string, str2 string) bool {
- return strings.ToUpper(str1) == strings.ToUpper(str2)
- }
- func (StringUtil *stringutil) StartsWith(s string, subStr string) bool {
- return strings.Index(s, subStr) == 0
- }
- func (StringUtil *stringutil) StartWithIgnoreCase(s string, subStr string) bool {
- return strings.HasPrefix(strings.ToLower(s), strings.ToLower(subStr))
- }
- func (StringUtil *stringutil) EndsWith(s string, subStr string) bool {
- return strings.LastIndex(s, subStr) == len(s)-1
- }
- func (StringUtil *stringutil) IsDigit(str string) bool {
- if str == "" {
- return false
- }
- sz := len(str)
- for i := 0; i < sz; i++ {
- if unicode.IsDigit(rune(str[i])) {
- continue
- } else {
- return false
- }
- }
- return true
- }
- func (StringUtil *stringutil) FormatDir(dir string) string {
- dir = strings.TrimSpace(dir)
- if dir != "" {
- if !StringUtil.EndsWith(dir, PathSeparator) {
- dir += PathSeparator
- }
- }
- return dir
- }
- func (StringUtil *stringutil) HexStringToBytes(s string) []byte {
- str := s
- bs := make([]byte, 0)
- flag := false
- str = strings.TrimSpace(str)
- if strings.Index(str, "0x") == 0 || strings.Index(str, "0X") == 0 {
- str = str[2:]
- }
- if len(str) == 0 {
- return bs
- }
- var bsChr []byte
- l := len(str)
- if l%2 == 0 {
- bsChr = []byte(str)
- } else {
- l += 1
- bsChr = make([]byte, l)
- bsChr[0] = '0'
- for i := 0; i < l-1; i++ {
- bsChr[i+1] = str[i]
- }
- }
- bs = make([]byte, l/2)
- pos := 0
- for i := 0; i < len(bsChr); i += 2 {
- bt := convertHex(bsChr[i])
- bt2 := convertHex(bsChr[i+1])
- if int(bt) == 0xff || int(bt2) == 0xff {
- flag = true
- break
- }
- bs[pos] = byte(bt*16 + bt2)
- pos++
- }
- if flag {
- bs = ([]byte)(str)
- }
- return bs
- }
- func convertHex(chr byte) byte {
- if chr >= '0' && chr <= '9' {
- return chr - '0'
- } else if chr >= 'a' && chr <= 'f' {
- return chr - 'a' + 10
- } else if chr >= 'A' && chr <= 'F' {
- return chr - 'A' + 10
- } else {
- return 0xff
- }
- }
- func (StringUtil *stringutil) BytesToHexString(bs []byte, pre bool) string {
- if bs == nil {
- return ""
- }
- if len(bs) == 0 {
- return ""
- }
- hexDigits := "0123456789ABCDEF"
- ret := new(strings.Builder)
- for _, b := range bs {
- ret.WriteByte(hexDigits[0x0F&(b>>4)])
- ret.WriteByte(hexDigits[0x0F&b])
- }
- if pre {
- return "0x" + ret.String()
- }
- return ret.String()
- }
- func (StringUtil *stringutil) ProcessSingleQuoteOfName(name string) string {
- return StringUtil.processQuoteOfName(name, "'")
- }
- func (StringUtil *stringutil) ProcessDoubleQuoteOfName(name string) string {
- return StringUtil.processQuoteOfName(name, "\"")
- }
- func (StringUtil *stringutil) processQuoteOfName(name string, quote string) string {
- if quote == "" || name == "" {
- return name
- }
- temp := name
- result := bytes.NewBufferString("")
- index := -1
- quetoLength := len(quote)
- index = strings.Index(temp, quote)
- for index != -1 {
- result.WriteString(temp[:index+quetoLength])
- result.WriteString(quote)
- temp = temp[index+quetoLength:]
- index = strings.Index(temp, quote)
- }
- result.WriteString(temp)
- return result.String()
- }
- func (StringUtil *stringutil) FormatTime() string {
- return time.Now().Format("2006-01-02 15:04:05")
- }
- func (StringUtil *stringutil) SubstringBetween(str string, open string, close string) string {
- if str == "" {
- return ""
- }
- iopen := -1
- if open != "" {
- iopen = strings.Index(str, open)
- }
- iclose := -1
- if close != "" {
- iclose = strings.LastIndex(str, close)
- }
- if iopen == -1 && iclose == -1 {
- return ""
- } else if iopen == -1 {
- return str[0:iclose]
- } else if iclose == -1 {
- return str[iopen:]
- } else {
- return str[iopen:iclose]
- }
- }
|