Вы не пытались найти решение, и SO обычно не пишет для вас код. Итак, вместо этого вот несколько предложений алгоритмов для вас:
Какой элегантный способ сделать это? (кроме проб и ошибок)
По какому определению элегантный ? (как красота, это зависит от глаз смотрящего ...)
Простой?
Начните с String.makeIterator
, напишите while
l oop , добавьте Character
s к своему префиксу, пока число байтов ≤ 32.
Это очень просто l oop, в худшем случае 32 итерации и 32 добавления.
«Умная» стратегия поиска?
Вы могли бы реализовать стратегию, основанную на средней длине байта каждого Character
в String
и использовании String.Prefix(Int)
.
Например, для вашего первого примера количество символов равно 2, а число байтов 36, дающее в среднем 18 байт / символ, 18 входит в 32 только один раз (мы не имеем дело с дробными символами или байтами!), Поэтому начните с Prefix(1)
, который имеет число байтов 28 и оставляет 1 символ и 8 байтов - так что остаток имеет среднюю длину байта 8, и вы ищете не более 4 дополнительных байтов, 8 переходит в 4 нулевых раза, и вы done.
В приведенном выше примере показан случай расширения (или нет) вашего предположения префикса. Если ваше предположение слишком длинное, вы можете просто запустить алгоритм с нуля, используя префиксный символ и количество байтов, а не исходную строку.
Если у вас возникли проблемы с реализацией вашего алгоритма, задайте новый вопрос, показывающий код, который вы ' Мы написали, опишите проблему, и кто-то, несомненно, поможет вам в следующем шаге.
HTH