diff --git a/AK/String.cpp b/AK/String.cpp index 7eeb97cc8e..1e18bca9a2 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -123,7 +124,7 @@ Vector String::split_limit(char separator, size_t limit, bool keep_empty return v; } -Vector String::split_view(const char separator, bool keep_empty) const +Vector String::split_view(Function separator, bool keep_empty) const { if (is_empty()) return {}; @@ -132,7 +133,7 @@ Vector String::split_view(const char separator, bool keep_empty) con size_t substart = 0; for (size_t i = 0; i < length(); ++i) { char ch = characters()[i]; - if (ch == separator) { + if (separator(ch)) { size_t sublen = i - substart; if (sublen != 0 || keep_empty) v.append(substring_view(substart, sublen)); @@ -145,6 +146,11 @@ Vector String::split_view(const char separator, bool keep_empty) con return v; } +Vector String::split_view(const char separator, bool keep_empty) const +{ + return split_view([separator](char ch) { return ch == separator; }, keep_empty); +} + ByteBuffer String::to_byte_buffer() const { if (!m_impl) diff --git a/AK/String.h b/AK/String.h index 1449f7e127..f7626d07e9 100644 --- a/AK/String.h +++ b/AK/String.h @@ -150,6 +150,7 @@ public: [[nodiscard]] Vector split_limit(char separator, size_t limit, bool keep_empty = false) const; [[nodiscard]] Vector split(char separator, bool keep_empty = false) const; [[nodiscard]] Vector split_view(char separator, bool keep_empty = false) const; + [[nodiscard]] Vector split_view(Function separator, bool keep_empty = false) const; [[nodiscard]] Optional find(char needle, size_t start = 0) const { return StringUtils::find(*this, needle, start); } [[nodiscard]] Optional find(StringView needle, size_t start = 0) const { return StringUtils::find(*this, needle, start); }