feat: query_parser + stringcase.
This commit is contained in:
65
stringcase/camel_case.go
Normal file
65
stringcase/camel_case.go
Normal file
@@ -0,0 +1,65 @@
|
||||
package stringcase
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
func UpperCamelCase(input string) string {
|
||||
return camelCase(input, true)
|
||||
}
|
||||
|
||||
func LowerCamelCase(input string) string {
|
||||
return camelCase(input, false)
|
||||
}
|
||||
|
||||
// ToPascalCase 把字符转换为 帕斯卡命名/大驼峰命名法(CamelCase)
|
||||
func ToPascalCase(input string) string {
|
||||
return camelCase(input, true)
|
||||
}
|
||||
|
||||
func camelCase(input string, upper bool) string {
|
||||
input = strings.TrimSpace(input)
|
||||
if input == "" {
|
||||
return input
|
||||
}
|
||||
|
||||
// 分割字符串
|
||||
words := Split(input)
|
||||
if len(words) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
filteredWords := make([]string, 0, len(words))
|
||||
for _, word := range words {
|
||||
if strings.TrimSpace(word) != "" {
|
||||
filteredWords = append(filteredWords, word)
|
||||
}
|
||||
}
|
||||
words = filteredWords
|
||||
if len(words) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
for i, word := range words {
|
||||
if word == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
runes := []rune(word)
|
||||
if len(runes) > 0 {
|
||||
if i == 0 && !upper {
|
||||
runes[0] = unicode.ToLower(runes[0]) // LowerCamelCase首单词首字母小写
|
||||
} else {
|
||||
runes[0] = unicode.ToUpper(runes[0]) // UpperCamelCase或后续单词首字母大写
|
||||
}
|
||||
for j := 1; j < len(runes); j++ {
|
||||
runes[j] = unicode.ToLower(runes[j]) // 其余字母统一小写
|
||||
}
|
||||
words[i] = string(runes)
|
||||
}
|
||||
}
|
||||
|
||||
// 合并结果
|
||||
return strings.Join(words, "")
|
||||
}
|
||||
Reference in New Issue
Block a user