splitCamelCase property
Split camel case.
All result parts will be lowercased. It will split when changing from lowercase to uppercase, and before from uppercase to lowercase. For example:
- From
'ABCAndAnotherABC'to['abc', 'and', 'another', 'abc']. - From
'abc123abc'to['abc123', 'abc'].
Implementation
List<String> get splitCamelCase {
if (isEmpty) return [];
final handler = <String>[];
var char = this[0];
late String before;
final buffer = StringBuffer(char);
for (var i = 1; i < length; i++) {
before = char;
char = this[i];
final current = buffer.toString();
// From lowercase or digit to uppercase, or from digit to alphabet.
if (current.isNotEmpty &&
(((before._lower || before._digit) && char._upper) ||
(before._digit && (char._upper || char._lower)))) {
handler.add(current);
buffer
..clear()
..write(char);
}
// Before uppercase to lowercase.
else if (current.length > 1 && before._upper && char._lower) {
handler.add(current.substring(0, current.length - 1));
buffer
..clear()
..write(before)
..write(char);
}
// Otherwise, just pass.
else {
buffer.write(char);
}
}
if (buffer.isNotEmpty) handler.add(buffer.toString());
return handler.map((part) => part.toLowerCase()).toList();
}