Improve string split performance (#933)
This commit is contained in:
parent
5f718932e6
commit
8bdc4458c7
|
@ -9,22 +9,18 @@
|
||||||
|
|
||||||
std::vector<std::string> StringHelper::Split(std::string s, const std::string& delimiter)
|
std::vector<std::string> StringHelper::Split(std::string s, const std::string& delimiter)
|
||||||
{
|
{
|
||||||
std::vector<std::string> result;
|
size_t pos_start = 0, pos_end, delim_len = delimiter.length();
|
||||||
|
std::string token;
|
||||||
|
std::vector<std::string> res;
|
||||||
|
|
||||||
size_t pos = 0;
|
while ((pos_end = s.find(delimiter, pos_start)) != std::string::npos) {
|
||||||
std::string token;
|
token = s.substr(pos_start, pos_end - pos_start);
|
||||||
|
pos_start = pos_end + delim_len;
|
||||||
|
res.push_back(token);
|
||||||
|
}
|
||||||
|
|
||||||
while ((pos = s.find(delimiter)) != std::string::npos)
|
res.push_back(s.substr(pos_start));
|
||||||
{
|
return res;
|
||||||
token = s.substr(0, pos);
|
|
||||||
result.push_back(token);
|
|
||||||
s.erase(0, pos + delimiter.length());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s.length() != 0)
|
|
||||||
result.push_back(s);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string StringHelper::Strip(std::string s, const std::string& delimiter)
|
std::string StringHelper::Strip(std::string s, const std::string& delimiter)
|
||||||
|
@ -127,4 +123,4 @@ bool StringHelper::IEquals(const std::string& a, const std::string& b)
|
||||||
{
|
{
|
||||||
return std::equal(a.begin(), a.end(), b.begin(), b.end(),
|
return std::equal(a.begin(), a.end(), b.begin(), b.end(),
|
||||||
[](char a, char b) { return tolower(a) == tolower(b); });
|
[](char a, char b) { return tolower(a) == tolower(b); });
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue