diff options
author | Dmitry Koteroff <vortex@verona.im> | 2017-12-12 05:14:38 +0300 |
---|---|---|
committer | Dmitry Koteroff <vortex@verona.im> | 2017-12-15 21:51:13 +0300 |
commit | 5302fd125b36d453615483f6ced4e40e973c499a (patch) | |
tree | 21a1e12476e0a6a7eec2e111143bf426ead2ea33 /core/ustring.cpp | |
parent | 36ce7c444d350b5fcd909f105fb6ca200f9d09df (diff) |
Added third argument for String.split() function (see issue #14349)
Remove negative limit, leave only positive and make it reflect behaviour like in Python
Also limit renamed to maxsplit to match Python one.
Also docs updated.
Fix indent
Diffstat (limited to 'core/ustring.cpp')
-rw-r--r-- | core/ustring.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/core/ustring.cpp b/core/ustring.cpp index 3a0708851e..1bf7d000c3 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -734,7 +734,7 @@ Vector<String> String::split_spaces() const { return ret; } -Vector<String> String::split(const String &p_splitter, bool p_allow_empty) const { +Vector<String> String::split(const String &p_splitter, bool p_allow_empty, int p_maxsplit) const { Vector<String> ret; int from = 0; @@ -745,8 +745,21 @@ Vector<String> String::split(const String &p_splitter, bool p_allow_empty) const int end = find(p_splitter, from); if (end < 0) end = len; - if (p_allow_empty || (end > from)) - ret.push_back(substr(from, end - from)); + if (p_allow_empty || (end > from)) { + if (p_maxsplit <= 0) + ret.push_back(substr(from, end - from)); + else if (p_maxsplit > 0) { + + // Put rest of the string and leave cycle. + if (p_maxsplit == ret.size()) { + ret.push_back(substr(from, len)); + break; + } + + // Otherwise, push items until positive limit is reached. + ret.push_back(substr(from, end - from)); + } + } if (end == len) break; |