#go
#Вперед
Вопрос:
Привет, у меня есть строка, которая говорит об этом.
"Style: Saison
ABV: 7.7
IBU: 20"
Я пытаюсь разделить его на массив, чтобы я мог получить Saison
Вот как я преобразую в массив.
style :=strings.Split(style, "Style:")
Когда я делаю
style[0]
Он не индексирует Saison. Я также пробовал style [1] и style [2], и ничего не происходит. Что я делаю не так?
Style = []string так что это список строк, верно?
Комментарии:
1. Да, результат разделения равен a
[]string
, но я не понимаю, почему вы думаете, что получитеSaison
. Попробуйте распечатать все и посмотреть, с чем именно вы работаете.2. стиль [0] попробуйте это
3. @JimB Вы понимаете, о чем я спрашиваю, прочитайте мой вопрос еще раз, пожалуйста. Я пытаюсь получить Saison.
4. @MattQuaine да, но как бы разбиение
Style:
и получение 0-го элемента выполнили это?
Ответ №1:
Вы могли бы использовать строки.FieldsFunc:
FieldsFunc разбивает строку s при каждом запуске кодовых точек Unicode c, удовлетворяющих f(c), и возвращает массив фрагментов s. Если все кодовые точки в s удовлетворяют f(c) или строка пуста, возвращается пустой фрагмент.
FieldsFunc не дает никаких гарантий относительно порядка, в котором он вызывает f(c), и предполагает, что f всегда возвращает одно и то же значение для данного c .
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
str := `Style: Saison Drink
ABV: 7.7
IBU: 20`
f := func(c rune) bool {
return c == ':' || c == 'n'
}
strFields := strings.FieldsFunc(str, f)
fmt.Printf("%qn", strFields)
styleValue := strings.TrimSpace(strFields[1])
fmt.Println(styleValue)
abvValue, err := strconv.ParseFloat(strings.TrimSpace(strFields[3]), 32)
if err != nil {
fmt.Println("Error parsing float!")
}
fmt.Printf("%.2fn", abvValue)
ibuValue, err := strconv.ParseInt(strings.TrimSpace(strFields[5]), 10, 32)
if err != nil {
fmt.Println("Error parsing int!")
}
fmt.Printf("%dn", ibuValue)
}
Вывод:
["Style" " Saison Drink" "ABV" " 7.7" "IBU" " 20"]
Saison Drink
7.70
20
Комментарии:
1. Большое вам спасибо! это хорошо, но то, что между словами был пробел. Нравится «Saison Drink»?
2. Хм, ok обновит ответ для этого нового варианта использования
3. но что, если я хочу получить 7.7? strFields[2] не работает
4. Обновленный ответ 🙂