69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
// Copyright 2018 The OpenPitrix Authors. All rights reserved.
|
|
// Use of this source code is governed by a Apache license
|
|
// that can be found in the LICENSE file.
|
|
|
|
package stringutil
|
|
|
|
import (
|
|
"unicode/utf8"
|
|
|
|
"github.com/asaskevich/govalidator"
|
|
)
|
|
|
|
// Creates an slice of slice values not included in the other given slice.
|
|
func Diff(base, exclude []string) (result []string) {
|
|
excludeMap := make(map[string]bool)
|
|
for _, s := range exclude {
|
|
excludeMap[s] = true
|
|
}
|
|
for _, s := range base {
|
|
if !excludeMap[s] {
|
|
result = append(result, s)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func Unique(ss []string) (result []string) {
|
|
smap := make(map[string]bool)
|
|
for _, s := range ss {
|
|
smap[s] = true
|
|
}
|
|
for s := range smap {
|
|
result = append(result, s)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func CamelCaseToUnderscore(str string) string {
|
|
return govalidator.CamelCaseToUnderscore(str)
|
|
}
|
|
|
|
func UnderscoreToCamelCase(str string) string {
|
|
return govalidator.UnderscoreToCamelCase(str)
|
|
}
|
|
|
|
func FindString(array []string, str string) int {
|
|
for index, s := range array {
|
|
if str == s {
|
|
return index
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
func StringIn(str string, array []string) bool {
|
|
return FindString(array, str) > -1
|
|
}
|
|
|
|
func Reverse(s string) string {
|
|
size := len(s)
|
|
buf := make([]byte, size)
|
|
for start := 0; start < size; {
|
|
r, n := utf8.DecodeRuneInString(s[start:])
|
|
start += n
|
|
utf8.EncodeRune(buf[size-start:], r)
|
|
}
|
|
return string(buf)
|
|
}
|