Как перевернуть строки, содержащие суррогатные пары в дартс? - PullRequest
1 голос
/ 13 октября 2019

Я играл с алгоритмами, использующими Dart, и, фактически, следуя TDD, я понял, что в моем коде есть некоторые ограничения.

Я пытался отменить строки как часть проблемы интервью, но не смогполучить суррогатные пары правильно в обратном порядке.

const simple = 'abc';
const emoji = '???';
const surrogate = '??‍♂️??‍?';

String rev(String s) {
    return String.fromCharCodes(s.runes.toList().reversed);
}

void main() {
    print(simple);
    print(rev(simple));
    print(emoji);
    print(rev(emoji));
    print(surrogate);
    print(rev(surrogate));
}

Вывод:

abc
cba
???
???
??‍♂️??‍?
?‍??️♂‍??

Вы можете видеть, что простые смайлики правильно перевернуты, поскольку я использую runes вместо простопросто выполняем s.split('').toList().reversed.join('');, но суррогатные пары обращаются неверно.

Как я могу перевернуть строку, которая может содержать суррогатные пары, используя язык программирования Dart?

1 Ответ

1 голос
/ 13 октября 2019

При перестановке строк вы должны работать с графемами, а не с символами или кодовыми единицами. Используйте grapheme_splitter .

...