суббота, 4 апреля 2020 г.

Преобразование между массивом/срезом рун и строкой в Golang

Конвертировать строку в руны

Когда вы преобразуете строку в срез рун, вы получаете новый срез, который содержит кодовые точки Unicode (руны) строки.

Для недопустимой последовательности UTF-8 значение руны будет 0xFFFD для каждого недопустимого байта.

r := []rune("ABC€")
fmt.Println(r)        // [65 66 67 8364]
fmt.Printf("%U\n", r) // [U+0041 U+0042 U+0043 U+20AC]

Вы также можете использовать range цикл для доступа к кодовым точкам строки.

r := "ABC€"
for _, value := range r {
 fmt.Println(value)
 fmt.Printf("%U\n", value)
}

Вывод:

65
U+0041
66
U+0042
67
U+0043
8364
U+20AC

Конвертировать руны в строку

Когда вы конвертируете срез рун в строку, вы получаете новую строку, которая представляет собой конкатенацию рун, преобразованных в строки в кодировке UTF-8.

Значения вне диапазона допустимых кодовых точек Unicode преобразуются в \uFFFD, символ замены Unicode �.

s := string([]rune{'\u0041', '\u0042', '\u0043', '\u20AC', -1})
fmt.Println(s) // ABC€�

Производительность

Эти преобразования создают новый срез или строку и, следовательно, имеют временную сложность, пропорциональную количеству обрабатываемых байтов.

Более эффективная альтернатива в некоторых случаях - использовать strings.Builder, который может объединять строки без избыточного копирования.


Читайте также:


Комментариев нет:

Отправить комментарий