Я играл с алгоритмами, использующими 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?