Безопасно записывать байты как символы UTF-8, используя строки. - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь выполнить упражнение, в котором мне нужно обратить некоторые строки. Я слышал, что Go strings. Builder - самый быстрый способ создания строк на данный момент, поэтому я сделал следующее:

func String(toReverse string) string {
    var reversedString strings.Builder

    for i := len(toReverse) - 1; i >= 0; i-- {
        reversedString.WriteByte(toReverse[i])
    }

    return reversedString.String()
}

Проблема в том, что это не работает с многобайтовыми тестовыми примерами, такими как:

Здравствуйте, 世界

становится

"\ u008c \ u0096¸, olleH"

Спасибо.

1 Ответ

0 голосов
/ 06 мая 2018

Хотя возможно - и по умолчанию - получить доступ к отдельным байтам строки по индексу, строка Go также может быть преобразована в массив рун, которые представляют отдельные кодовые точки Unicode.

Прежде всего вам нужно привести свою строку в руну [] и выполнить итерацию:

func String(toReverse string) string {
    var reversedString strings.Builder
    runes := []rune(toReverse)

    for i := len(runes) - 1; i >= 0; i-- {
        reversedString.WriteRune(runes[i])
    }

    return reversedString.String()
}

См. https://play.golang.org/p/WYn_MGAGw_x для живой демонстрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...