splitCapitalizedUnicode method
Returns a list of segments split at capitalized letters (Unicode-aware).
When splitNumbers is true, also splits before digits. When
splitBySpace is true, further splits each segment by whitespace.
Adjacent segments shorter than minLength are merged together.
Implementation
@useResult
List<String> splitCapitalizedUnicode({
bool splitNumbers = false,
bool splitBySpace = false,
int minLength = 1,
}) {
if (isEmpty) {
return <String>[];
}
final RegExp capitalizationPattern = splitNumbers
? _splitCapitalizedUnicodeWithNumbersRegex
: _splitCapitalizedUnicodeRegex;
List<String> intermediateSplit = split(capitalizationPattern);
if (minLength > 1 && intermediateSplit.length > 1) {
final List<String> mergedResult = <String>[];
String currentBuffer = intermediateSplit[0];
for (int i = 1; i < intermediateSplit.length; i++) {
final String nextPart = intermediateSplit[i];
if (currentBuffer.length < minLength || nextPart.length < minLength) {
currentBuffer = '$currentBuffer$nextPart';
} else {
mergedResult.add(currentBuffer);
currentBuffer = nextPart;
}
}
mergedResult.add(currentBuffer);
intermediateSplit = mergedResult;
}
if (!splitBySpace) {
return intermediateSplit;
}
return intermediateSplit
.expand((String part) => part.split(_consecutiveSpacesRegex))
.where((String s) => s.isNotEmpty)
.toList();
}