split抽象方法
- Pattern pattern
根据pattern
匹配的内容分割字符串,并返回一个子字符串列表。
通过使用Pattern.allMatches找到字符串中所有pattern
的匹配项,并返回匹配项之间的子字符串列表,包括第一个匹配项之前和最后一个匹配项之后的子字符串。
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代码单元边界处发生,而不是在rune(Unicode代码点)边界处。
// 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
要获取包含字符串单个runes的字符串列表,不应使用split。您可以通过以下方式获取每个rune的字符串:
const string = '\u{1F642}';
for (final rune in string.runes) {
print(String.fromCharCode(rune));
}
实现
List<String> split(Pattern pattern);