diff --git a/AK/String.cpp b/AK/String.cpp index c1a830f3f8..8922a2a543 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -131,12 +131,12 @@ StringView String::substring_view(size_t start, size_t length) const return { characters() + start, length }; } -Vector String::split(const char separator) const +Vector String::split(char separator, bool keep_empty) const { - return split_limit(separator, 0); + return split_limit(separator, 0, keep_empty); } -Vector String::split_limit(const char separator, size_t limit) const +Vector String::split_limit(char separator, size_t limit, bool keep_empty) const { if (is_empty()) return {}; @@ -147,16 +147,14 @@ Vector String::split_limit(const char separator, size_t limit) const char ch = characters()[i]; if (ch == separator) { size_t sublen = i - substart; - if (sublen != 0) + if (sublen != 0 || keep_empty) v.append(substring(substart, sublen)); substart = i + 1; } } size_t taillen = length() - substart; - if (taillen != 0) + if (taillen != 0 || keep_empty) v.append(substring(substart, taillen)); - if (characters()[length() - 1] == separator) - v.append(empty()); return v; } diff --git a/AK/String.h b/AK/String.h index 0f7a716192..62e82b6180 100644 --- a/AK/String.h +++ b/AK/String.h @@ -140,8 +140,8 @@ public: bool contains(const String&) const; - Vector split_limit(char separator, size_t limit) const; - Vector split(char separator) const; + Vector split_limit(char separator, size_t limit, bool keep_empty = false) const; + Vector split(char separator, bool keep_empty = false) const; String substring(size_t start, size_t length) const; Vector split_view(char separator, bool keep_empty = false) const;