diff --git a/AK/StringView.cpp b/AK/StringView.cpp index 69657e78cde..6f8af57d107 100644 --- a/AK/StringView.cpp +++ b/AK/StringView.cpp @@ -105,6 +105,13 @@ Vector StringView::lines(bool consider_cr) const return v; } +bool StringView::starts_with(char ch) const +{ + if (is_empty()) + return false; + return ch == characters_without_null_termination()[0]; +} + bool StringView::starts_with(const StringView& str) const { if (str.is_empty()) @@ -118,6 +125,13 @@ bool StringView::starts_with(const StringView& str) const return !memcmp(characters_without_null_termination(), str.characters_without_null_termination(), str.length()); } +bool StringView::ends_with(char ch) const +{ + if (is_empty()) + return false; + return ch == characters_without_null_termination()[length() - 1]; +} + bool StringView::ends_with(const StringView& str) const { if (str.is_empty()) diff --git a/AK/StringView.h b/AK/StringView.h index 4bf12a53644..8ccbefcad5c 100644 --- a/AK/StringView.h +++ b/AK/StringView.h @@ -63,6 +63,8 @@ public: bool starts_with(const StringView&) const; bool ends_with(const StringView&) const; + bool starts_with(char) const; + bool ends_with(char) const; StringView substring_view(size_t start, size_t length) const; Vector split_view(char, bool keep_empty = false) const; diff --git a/AK/Tests/TestStringView.cpp b/AK/Tests/TestStringView.cpp index 8b3fb3841e9..a9e032470e6 100644 --- a/AK/Tests/TestStringView.cpp +++ b/AK/Tests/TestStringView.cpp @@ -63,6 +63,8 @@ TEST_CASE(starts_with) { String test_string = "ABCDEF"; StringView test_string_view = test_string.view(); + EXPECT(test_string_view.starts_with('A')); + EXPECT(!test_string_view.starts_with('B')); EXPECT(test_string_view.starts_with("AB")); EXPECT(test_string_view.starts_with("ABCDEF")); EXPECT(!test_string_view.starts_with("DEF")); @@ -73,6 +75,8 @@ TEST_CASE(ends_with) String test_string = "ABCDEF"; StringView test_string_view = test_string.view(); EXPECT(test_string_view.ends_with("DEF")); + EXPECT(test_string_view.ends_with('F')); + EXPECT(!test_string_view.ends_with('E')); EXPECT(test_string_view.ends_with("ABCDEF")); EXPECT(!test_string_view.ends_with("ABCDE")); EXPECT(!test_string_view.ends_with("ABCDEFG"));