diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index f7a2578deb8ebd..4d7ba3027f9b95 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -1108,6 +1108,18 @@ pub fn (s string) split_into_lines() []string { return res } +// split_by_space splits the string by whitespace (any of ` `, `\n`, `\t`, `\v`, `\f`, `\r`). +// Repeated, trailing or leading whitespaces will be omitted. +pub fn (s string) split_by_space() []string { + mut res := []string{} + for word in s.split_any(' \n\t\v\f\r') { + if word != '' { + res << word + } + } + return res +} + // substr returns the string between index positions `start` and `end`. // Example: assert 'ABCD'.substr(1,3) == 'BC' @[direct_array_access] diff --git a/vlib/builtin/string_test.v b/vlib/builtin/string_test.v index 3bf5b213737bfb..f54b21502fd61c 100644 --- a/vlib/builtin/string_test.v +++ b/vlib/builtin/string_test.v @@ -442,6 +442,13 @@ fn test_rsplit_once() ? { assert ext3 == '' } +fn test_split_by_space() { + assert 'a b c'.split_by_space() == ['a', 'b', 'c'] + assert ' a\t\tb\tc'.split_by_space() == ['a', 'b', 'c'] + assert 'a b c \n\r'.split_by_space() == ['a', 'b', 'c'] + assert '\ta b \t \tc \r\n'.split_by_space() == ['a', 'b', 'c'] +} + fn test_is_bin() { assert ''.is_bin() == false assert '0b1'.is_bin() == true