Метод split
- Pattern pattern
Разделяет строку по совпадениям с pattern и возвращает список подстрок.
Находит все совпадения с pattern в этой строке, как с помощью Pattern.allMatches, и возвращает список подстрок между совпадениями, перед первым совпадением и после последнего совпадения.
const string = 'Hello world!';
final splitted = string.split(' ');
print(splitted); // [Hello, world!];
Если шаблон вообще не совпадает с этой строкой, результат всегда будет списком, содержащим только исходную строку.
Если pattern является String, то всегда выполняется:
string.split(pattern).join(pattern) == string
Если первое совпадение — это пустое совпадение в начале строки, то пустая подстрока перед ним не включается в результат. Если последнее совпадение — это пустое совпадение в конце строки, то пустая подстрока после него не включается в результат. Если совпадение пустое и непосредственно следует за предыдущим совпадением (начинается в позиции, где закончилось предыдущее совпадение), то пустая подстрока между двумя совпадениями не включается в результат.
const string = 'abba'; final re = RegExp(r'b*'); // re.allMatches(string) will find four matches: // * empty match before first "a". // * match of "bb" // * empty match after "bb", before second "a" // * empty match after second "a". print(string.split(re)); // [a, a]
Непустое совпадение в начале или конце строки, или после другого совпадения, не обрабатывается специально и добавит пустые подстроки в результат:
const string = 'abbaa';
final splitted = string.split('a'); // ['', 'bb', '', '']
Если эта строка пустая, результат — это пустой список, если pattern совпадает с пустой строкой, так как пустые строки перед и после первого и последнего пустого совпадения не включаются. (Это все равно будет список, содержащий исходную пустую строку [""] если шаблон не совпадает).
const string = '';
print(string.split('')); // []
print(string.split('a')); // []
Разделение с пустым шаблоном разделяет строку на строки с одним кодом.
const string = 'Pub';
print(string.split('')); // [P, u, b]
// Same as:
var codeUnitStrings = [
for (final unit in string.codeUnits) String.fromCharCode(unit)
];
print(codeUnitStrings); // [P, u, b]
Разделение происходит по границам кодовых единиц UTF-16, а не по границам рун (точек кода Юникода):
// String made up of two code units, but one rune.
const string = '\u{1D11E}';
final splitted = string.split('');
print(splitted); // ['\ud834', '\udd1e'] - 2 unpaired surrogate values
Чтобы получить список строк, содержащих отдельные руны строки, не следует использовать split. Вместо этого можно получить строку для каждой руны следующим образом:
const string = '\u{1F642}';
for (final rune in string.runes) {
print(String.fromCharCode(rune));
}
Реализация
List<String> split(Pattern pattern);
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-core/String/split.html