Как изменить символы в определенных позициях в строке

#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