diff options
| author | Dmitry Koteroff | 2017-12-12 05:14:38 +0300 |
|---|---|---|
| committer | Dmitry Koteroff | 2017-12-15 21:51:13 +0300 |
| commit | 5302fd125b36d453615483f6ced4e40e973c499a (patch) | |
| tree | 21a1e12476e0a6a7eec2e111143bf426ead2ea33 /core/ustring.cpp | |
| parent | 36ce7c444d350b5fcd909f105fb6ca200f9d09df (diff) | |
| download | godot-5302fd125b36d453615483f6ced4e40e973c499a.tar.gz godot-5302fd125b36d453615483f6ced4e40e973c499a.tar.zst godot-5302fd125b36d453615483f6ced4e40e973c499a.zip | |
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 3a0708851..1bf7d000c 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; |
