Added StringHelper class

Change-Id: I1b9c7bff7127410619f0753d3aa2a52229d2fc85
diff --git a/FQName.cpp b/FQName.cpp
index bc47c46..b031c6f 100644
--- a/FQName.cpp
+++ b/FQName.cpp
@@ -15,6 +15,7 @@
  */
 
 #include "FQName.h"
+#include "StringHelper.h"
 
 #include <android-base/logging.h>
 #include <iostream>
@@ -159,40 +160,6 @@
     return string() == other.string();
 }
 
-static void SplitString(
-        const std::string &s, char c, std::vector<std::string> *components) {
-    components->clear();
-
-    size_t startPos = 0;
-    size_t matchPos;
-    while ((matchPos = s.find(c, startPos)) != std::string::npos) {
-        components->push_back(s.substr(startPos, matchPos - startPos));
-        startPos = matchPos + 1;
-    }
-
-    if (startPos + 1 < s.length()) {
-        components->push_back(s.substr(startPos));
-    }
-}
-
-// static
-std::string FQName::JoinStrings(
-        const std::vector<std::string> &components,
-        const std::string &separator) {
-    std::string out;
-    bool first = true;
-    for (const auto &component : components) {
-        if (!first) {
-            out += separator;
-        }
-        out += component;
-
-        first = false;
-    }
-
-    return out;
-}
-
 const FQName FQName::getTopLevelType() const {
     auto idx = mName.find('.');
 
@@ -208,11 +175,11 @@
     getPackageAndVersionComponents(&components, true /* cpp_compatible */);
 
     std::vector<std::string> nameComponents;
-    SplitString(mName, '.', &nameComponents);
+    StringHelper::SplitString(mName, '.', &nameComponents);
 
     components.insert(components.end(), nameComponents.begin(), nameComponents.end());
 
-    return JoinStrings(components, "_");
+    return StringHelper::JoinStrings(components, "_");
 }
 
 std::string FQName::cppNamespace() const {
@@ -220,25 +187,25 @@
     getPackageAndVersionComponents(&components, true /* cpp_compatible */);
 
     std::string out = "::";
-    out += JoinStrings(components, "::");
+    out += StringHelper::JoinStrings(components, "::");
 
     return out;
 }
 
 std::string FQName::cppLocalName() const {
     std::vector<std::string> components;
-    SplitString(mName, '.', &components);
+    StringHelper::SplitString(mName, '.', &components);
 
-    return JoinStrings(components, "::");
+    return StringHelper::JoinStrings(components, "::");
 }
 
 std::string FQName::cppName() const {
     std::string out = cppNamespace();
 
     std::vector<std::string> components;
-    SplitString(name(), '.', &components);
+    StringHelper::SplitString(name(), '.', &components);
     out += "::";
-    out += JoinStrings(components, "::");
+    out += StringHelper::JoinStrings(components, "::");
 
     return out;
 }
@@ -247,7 +214,7 @@
     std::vector<std::string> components;
     getPackageAndVersionComponents(&components, true /* cpp_compatible */);
 
-    return JoinStrings(components, ".");
+    return StringHelper::JoinStrings(components, ".");
 }
 
 std::string FQName::javaName() const {
@@ -255,7 +222,7 @@
 }
 
 void FQName::getPackageComponents(std::vector<std::string> *components) const {
-    SplitString(package(), '.', components);
+    StringHelper::SplitString(package(), '.', components);
 }
 
 void FQName::getPackageAndVersionComponents(