This tutorial gives you examples of how to split a
String into a
List based on the given delimiter.
String class has an instance method
split() that can be used to split a
String into a
List<String> split(Pattern pattern);
Below are the usage examples of the method.
Split by Comma
To split a string by comma, use the
split method with comma (
,) as the argument.
String text = 'Dart,Flutter,Programming'; List<String> result = text.split(',');
['Dart', 'Flutter', 'Programming']
Split by Space
Below is another example with space as the delimiter.
String text = 'Android iOS Fuschia Linux Windows MacOS'; List result = text.split(' ');
['Android', 'iOS', 'Fuschia', 'Linux', 'Windows', 'MacOS']
Split using Regex
split method accepts a
Pattern to be passed as argument. In simple cases, passing a string as the argument is enough. Sometimes using regular expression is necessary. For example, there is a string
axbxxcd and we want to split it by
x. If we pass
x as the argument, there will be an empty string as the result of two sequential
String text = 'axbxxcd'; List<String> result = text.split('x');
['a', 'b', '', 'cd']
For excluding the empty string from the result, pass a
RegExp instead and find the occurence of
x+ which means one or more
String text = 'axbxxcd'; List<String> result = text.split(new RegExp(r'x+'));
['a', 'b', 'cd']
Split with An Empty String Delimiter
If the delimiter is an empty string, each character will become an element in the resulting array. Keep in mind that
split() works on code unit boundaries, not at rune boundaries, which may affect characters with multi code units.
String text = 'dart'; List<String> result = text.split('');
['d', 'a', 'r', 't']
Split with An Unmatched Delimiter
If the given delimiter doesn't present in the string, it will return a
List with the string as the only element.
String text = 'dart'; List<String> result = text.split('x');
Split An Empty String
If the passed string is empty, the result will be an empty List if the passed argument matches.
String text = ''; List<String> result = text.split('');
If the pattern doesn't match, it will return a
List with an empty string as the only element.
String text = ''; List<String> result = text.split('x');
Handle Characters with Multi Code Units
Some characters can have multiple code units despite only having one rune.
split() works at code unit boundaries, not at rune boundaries. Look at the example below. There is a string that contains a Byzantine music symbol. The symbol is represented by two code units. If you split the string with an empty string as the delimiter, the expected result is each character in the original string become an element with the same value in the result. However, because the symbol is formed from multiple code units, it's splited into two elements in the result.
String text = '𝀾woolha'; List result = text.split('');
['�', '�', 'w', 'o', 'o', 'l', 'h', 'a']
For this case, the solution is iterating at rune boundaries. The list of runes can be obtained by accessing
String text = '𝀾woolha'; List result =text.runes .map((rune) => new String.fromCharCode(rune)) .toList());
['𝀾', 'w', 'o', 'o', 'l', 'h', 'a']
That's how to convert a
String into a
List<String>. It can be done using
split() method which supports any delimiter or
Pattern. For doing the reverse thing, you can read about how to join a
List into a
String with any separator.