summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2015-04-24 23:02:00 -0700
committerElliott Hughes <enh@google.com>2015-04-27 19:42:20 -0700
commit8d5fa6da44d56511b3e173bc463cbc65ff221b4a (patch)
tree684c19a54a0f82c7edd0005dd3cf2de86e4d409e /base
parent06d2128f8729f3349f5ba588829c6f992a793c22 (diff)
Remove strtok from adb.
Also fix android::base::Split to behave like Java, Python, and google3. Change-Id: Ifbffd4e92950a79e7aea5d153c95fe0980648417
Diffstat (limited to 'base')
-rw-r--r--base/include/base/strings.h2
-rw-r--r--base/strings.cpp13
-rw-r--r--base/strings_test.cpp13
3 files changed, 11 insertions, 17 deletions
diff --git a/base/include/base/strings.h b/base/include/base/strings.h
index 355934246..5dbc5fbfb 100644
--- a/base/include/base/strings.h
+++ b/base/include/base/strings.h
@@ -27,8 +27,6 @@ namespace base {
//
// The string is split at each occurrence of a character in delimiters.
//
-// Empty splits will be omitted. I.e. Split("a,,b", ",") -> {"a", "b"}
-//
// The empty string is not a valid delimiter list.
std::vector<std::string> Split(const std::string& s,
const std::string& delimiters);
diff --git a/base/strings.cpp b/base/strings.cpp
index 6f698d9a7..d3375d9fa 100644
--- a/base/strings.cpp
+++ b/base/strings.cpp
@@ -32,24 +32,17 @@ std::vector<std::string> Split(const std::string& s,
const std::string& delimiters) {
CHECK_NE(delimiters.size(), 0U);
- std::vector<std::string> split;
- if (s.size() == 0) {
- // Split("", d) returns {} rather than {""}.
- return split;
- }
+ std::vector<std::string> result;
size_t base = 0;
size_t found;
do {
found = s.find_first_of(delimiters, base);
- if (found != base) {
- split.push_back(s.substr(base, found - base));
- }
-
+ result.push_back(s.substr(base, found - base));
base = found + 1;
} while (found != s.npos);
- return split;
+ return result;
}
std::string Trim(const std::string& s) {
diff --git a/base/strings_test.cpp b/base/strings_test.cpp
index 1bf07a18e..46a1ab543 100644
--- a/base/strings_test.cpp
+++ b/base/strings_test.cpp
@@ -23,7 +23,8 @@
TEST(strings, split_empty) {
std::vector<std::string> parts = android::base::Split("", ",");
- ASSERT_EQ(0U, parts.size());
+ ASSERT_EQ(1U, parts.size());
+ ASSERT_EQ("", parts[0]);
}
TEST(strings, split_single) {
@@ -42,9 +43,10 @@ TEST(strings, split_simple) {
TEST(strings, split_with_empty_part) {
std::vector<std::string> parts = android::base::Split("foo,,bar", ",");
- ASSERT_EQ(2U, parts.size());
+ ASSERT_EQ(3U, parts.size());
ASSERT_EQ("foo", parts[0]);
- ASSERT_EQ("bar", parts[1]);
+ ASSERT_EQ("", parts[1]);
+ ASSERT_EQ("bar", parts[2]);
}
TEST(strings, split_null_char) {
@@ -65,9 +67,10 @@ TEST(strings, split_any) {
TEST(strings, split_any_with_empty_part) {
std::vector<std::string> parts = android::base::Split("foo:,bar", ",:");
- ASSERT_EQ(2U, parts.size());
+ ASSERT_EQ(3U, parts.size());
ASSERT_EQ("foo", parts[0]);
- ASSERT_EQ("bar", parts[1]);
+ ASSERT_EQ("", parts[1]);
+ ASSERT_EQ("bar", parts[2]);
}
TEST(strings, trim_empty) {