Browse Source

Fix String.split() with empty string and delimeter

VolTer 2 years ago
parent
commit
57e39d0ce9
2 changed files with 16 additions and 0 deletions
  1. 8 0
      core/string/ustring.cpp
  2. 8 0
      tests/core/string/test_string.h

+ 8 - 0
core/string/ustring.cpp

@@ -1157,6 +1157,14 @@ Vector<String> String::split_spaces() const {
 
 
 Vector<String> String::split(const String &p_splitter, bool p_allow_empty, int p_maxsplit) const {
 Vector<String> String::split(const String &p_splitter, bool p_allow_empty, int p_maxsplit) const {
 	Vector<String> ret;
 	Vector<String> ret;
+
+	if (is_empty()) {
+		if (p_allow_empty) {
+			ret.push_back("");
+		}
+		return ret;
+	}
+
 	int from = 0;
 	int from = 0;
 	int len = length();
 	int len = length();
 
 

+ 8 - 0
tests/core/string/test_string.h

@@ -512,6 +512,14 @@ TEST_CASE("[String] Splitting") {
 		CHECK(l[i] == slices_3[i]);
 		CHECK(l[i] == slices_3[i]);
 	}
 	}
 
 
+	s = "";
+	l = s.split();
+	CHECK(l.size() == 1);
+	CHECK(l[0] == "");
+
+	l = s.split("", false);
+	CHECK(l.size() == 0);
+
 	s = "Mars Jupiter Saturn Uranus";
 	s = "Mars Jupiter Saturn Uranus";
 	const char *slices_s[4] = { "Mars", "Jupiter", "Saturn", "Uranus" };
 	const char *slices_s[4] = { "Mars", "Jupiter", "Saturn", "Uranus" };
 	l = s.split_spaces();
 	l = s.split_spaces();