From 96a9faf2fd03c93acdb9db813785d7e5b74da4cd Mon Sep 17 00:00:00 2001 From: Larpon Date: Tue, 7 Jun 2022 17:43:06 +0200 Subject: [PATCH] strings: add split_capital (#14716) --- vlib/strings/strings.v | 21 +++++++++++++++++++++ vlib/strings/strings_test.v | 11 +++++++++++ 2 files changed, 32 insertions(+) diff --git a/vlib/strings/strings.v b/vlib/strings/strings.v index ce0c82ebc..df08a26db 100644 --- a/vlib/strings/strings.v +++ b/vlib/strings/strings.v @@ -126,3 +126,24 @@ pub fn find_between_pair_string(input string, start string, end string) string { } return '' } + +// split_capital returns an array containing the contents of `s` split by capital letters. +// Example: assert strings.split_capital('XYZ') == ['X', 'Y', 'Z'] +// Example: assert strings.split_capital('XYStar') == ['X', 'Y', 'Star'] +pub fn split_capital(s string) []string { + mut res := []string{} + mut word_start := 0 + for idx, c in s { + if c >= `A` && c <= `Z` { + if word_start != idx { + res << s#[word_start..idx] + } + word_start = idx + continue + } + } + if word_start != s.len { + res << s#[word_start..] + } + return res +} diff --git a/vlib/strings/strings_test.v b/vlib/strings/strings_test.v index 0475b6aad..579d99b28 100644 --- a/vlib/strings/strings_test.v +++ b/vlib/strings/strings_test.v @@ -94,3 +94,14 @@ fn test_find_between_pair_family() { assert '$e1' == '$e2' } } + +fn test_split_capital() { + assert strings.split_capital('') == [] + assert strings.split_capital('abc') == ['abc'] + assert strings.split_capital('X') == ['X'] + assert strings.split_capital('XX') == ['X', 'X'] + assert strings.split_capital('XYZ') == ['X', 'Y', 'Z'] + assert strings.split_capital('JohnWilliams') == ['John', 'Williams'] + assert strings.split_capital('JDStar') == ['J', 'D', 'Star'] + assert strings.split_capital('cpDumpRotarySpring') == ['cp', 'Dump', 'Rotary', 'Spring'] +} -- 2.30.2