#go
#Вперед
Вопрос:
Для строки, подобной «AA_BB_CC», я хотел бы превратить ее в «AaBbCc». Я думал, что смогу сделать это так:
func CapsToCamel() string {
var buf bytes.Buffer
s := "AA_BB_CC"
toUpper := true
for i :=0; i<len(s); i {
if toUpper {
buf.WriteString(strings.ToUpper(s[i])) // error: s[i] is of byte.
...
}
Я остановился на этом, хотя я мог бы обработать каждый s[i]
символ как символ ASCII, а затем сравнить его значение с a
и z
, но я думаю, что должен быть способ сделать это.
Комментарии:
1. Вам нужно преобразовать его обратно в строку:
string(s[i])
2. @zerkms это работает! Но можно ли это сделать (превратить строку в байт и поиграть с каждым байтом)?
3. Посмотрите здесь, хотя: play.golang.org/p/m0iX49jlxNl
Ответ №1:
Вот более чистое рабочее решение, использующее только strings
пакет, без необходимости полагаться на using bytes.Buffer
.
func CapsToCamel(s string) string {
newstr := ""
str := []byte(strings.Join(strings.Split(s, "_"), ""))
for i := 0; i < len(str); i = 2 {
newstr = string(str[i])
newstr = strings.ToLower(string(str[i]))
}
return newstr
}
Простой пример также доступен на playground: https://play.golang.org/p/1YIeTlr8a6D