Метод replaceAllMapped
Метод replaceAllMapped класса String ищет в строке все совпадения с заданным шаблоном и заменяет каждое из них на результат, возвращаемый переданной функцией-обработчиком. В первый параметр мы передаем шаблон (строку или регулярное выражение RegExp), который нужно найти. Во второй параметр мы передаем функцию, которая принимает объект совпадения Match и возвращает строку для замены. Метод возвращает новую строку, а исходная строка остается неизменной.
Главное отличие от метода replaceAll заключается в том, что здесь замена вычисляется динамически для каждого совпадения, а не является фиксированной строкой.
Синтаксис
str.replaceAllMapped(pattern, callback)
Пример
Давайте заменим все цифры в строке на их квадраты, используя функцию-обработчик:
void main()
{
String str = 'a1b2c3';
String res = str.replaceAllMapped(RegExp(r'\d'), (Match match) {
int num = int.parse(match.group(0)!);
return (num * num).toString();
});
print(res);
}
Результат выполнения кода:
"a1b4c9"
Пример
Давайте обернем каждое слово в квадратные скобки, используя регулярное выражение для поиска слов:
void main()
{
String str = 'abcde fghij';
String res = str.replaceAllMapped(RegExp(r'\w+'), (Match match) {
return '[' + match.group(0)! + ']';
});
print(res);
}
Результат выполнения кода:
"[abcde] [fghij]"
Пример
Давайте заменим все вхождения подстроки 'ab' на ее порядковый номер в строке:
void main()
{
String str = 'ab ab ab';
int count = 0;
String res = str.replaceAllMapped('ab', (Match match) {
count++;
return count.toString();
});
print(res);
}
Результат выполнения кода:
"1 2 3"
Смотрите также
-
метод
replaceAll,
который заменяет все вхождения подстроки -
метод
replaceFirst,
который заменяет первое вхождение подстроки -
метод
replaceFirstMapped,
который заменяет первое вхождение с помощью функции -
метод
split,
который разбивает строку на список подстрок