Parcourir la source

AK: Also add a keep_empty argument to String::split[_limit]()

Just like String[View]::split_view() has already.
Sergey Bugaev il y a 5 ans
Parent
commit
6a64077ed7
2 fichiers modifiés avec 7 ajouts et 9 suppressions
  1. 5 7
      AK/String.cpp
  2. 2 2
      AK/String.h

+ 5 - 7
AK/String.cpp

@@ -131,12 +131,12 @@ StringView String::substring_view(size_t start, size_t length) const
     return { characters() + start, length };
     return { characters() + start, length };
 }
 }
 
 
-Vector<String> String::split(const char separator) const
+Vector<String> String::split(char separator, bool keep_empty) const
 {
 {
-    return split_limit(separator, 0);
+    return split_limit(separator, 0, keep_empty);
 }
 }
 
 
-Vector<String> String::split_limit(const char separator, size_t limit) const
+Vector<String> String::split_limit(char separator, size_t limit, bool keep_empty) const
 {
 {
     if (is_empty())
     if (is_empty())
         return {};
         return {};
@@ -147,16 +147,14 @@ Vector<String> String::split_limit(const char separator, size_t limit) const
         char ch = characters()[i];
         char ch = characters()[i];
         if (ch == separator) {
         if (ch == separator) {
             size_t sublen = i - substart;
             size_t sublen = i - substart;
-            if (sublen != 0)
+            if (sublen != 0 || keep_empty)
                 v.append(substring(substart, sublen));
                 v.append(substring(substart, sublen));
             substart = i + 1;
             substart = i + 1;
         }
         }
     }
     }
     size_t taillen = length() - substart;
     size_t taillen = length() - substart;
-    if (taillen != 0)
+    if (taillen != 0 || keep_empty)
         v.append(substring(substart, taillen));
         v.append(substring(substart, taillen));
-    if (characters()[length() - 1] == separator)
-        v.append(empty());
     return v;
     return v;
 }
 }
 
 

+ 2 - 2
AK/String.h

@@ -140,8 +140,8 @@ public:
 
 
     bool contains(const String&) const;
     bool contains(const String&) const;
 
 
-    Vector<String> split_limit(char separator, size_t limit) const;
-    Vector<String> split(char separator) const;
+    Vector<String> split_limit(char separator, size_t limit, bool keep_empty = false) const;
+    Vector<String> split(char separator, bool keep_empty = false) const;
     String substring(size_t start, size_t length) const;
     String substring(size_t start, size_t length) const;
 
 
     Vector<StringView> split_view(char separator, bool keep_empty = false) const;
     Vector<StringView> split_view(char separator, bool keep_empty = false) const;