23 #include "StringUtil.h"
25 StringUtil::StringUtil() {
30 StringUtil::~StringUtil() {
34 void StringUtil::toUpper(
string &str)
36 transform(str.begin(), str.end(), str.begin(), ::toupper);
39 string StringUtil::toUpperCopy(
const string& str)
46 void StringUtil::toLower(
string& str)
48 transform(str.begin(), str.end(), str.begin(), ::tolower);
51 string StringUtil::toLowerCopy(
const string& str)
58 void StringUtil::replaceFirst(
string &str,
const string& ths,
const string& with)
60 size_t start_pos = str.find(ths);
61 if(start_pos != std::string::npos)
63 str.replace(start_pos, ths.length(), with);
67 string StringUtil::replaceFirstCopy(
const string &str,
const string& ths,
const string& with)
70 replaceFirst(strn, ths, with);
74 void StringUtil::replaceAll(
string &str,
const string& ths,
const string& with)
79 while((start_pos = str.find(ths, start_pos)) != std::string::npos) {
80 str.replace(start_pos, ths.length(), with);
81 start_pos += with.length();
85 string StringUtil::replaceAllCopy(
const string &str,
const string& ths,
const string& with)
88 replaceAll(strn, ths, with);
92 void StringUtil::eraseAll(
string& str,
const string& ths)
97 while((start_pos = str.find(ths)) != std::string::npos) {
98 str.erase(start_pos, ths.length());
102 void StringUtil::capitalized(
string& str)
104 str[0] = toupper(str[0]);
107 string StringUtil::capitalizedCopy(
const string& str)
114 void StringUtil::replaceLast(
string& str,
const string& ths,
const string& with)
116 size_t start_pos = str.find_last_of(ths);
117 if(start_pos != std::string::npos)
119 str.replace(start_pos, ths.length(), with);
123 string StringUtil::replaceLastCopy(
const string& str,
const string& ths,
const string& with)
126 replaceLast(strn, ths, with);
130 vector<string> StringUtil::split(
const string& input,
const string& delimiter)
132 vector<string> output;
133 split(output, input, delimiter);
138 void StringUtil::splitInternal(vector<string> &output,
const string& input,
const string& delimiter)
143 start = temp.find(delimiter);
144 while(start!=string::npos)
148 output.push_back(temp.substr(0, start));
152 output.push_back(
"");
154 if(temp.length()>start+delimiter.length())
156 temp = temp.substr(start+delimiter.length());
157 start = temp.find(delimiter);
161 temp = temp.substr(start);
165 replaceFirst(temp, delimiter,
"");
166 output.push_back(temp);
169 void StringUtil::split(vector<string> &output,
const string& input,
const string& delimiter)
172 splitInternal(output, input, delimiter);
175 vector<string> StringUtil::split(
const string& input, vector<string> delimiters)
177 vector<string> output;
178 split(output, input, delimiters);
182 void StringUtil::split(vector<string>& output,
const string& input, vector<string> delimiters)
185 output.push_back(input);
186 for (
int var = 0; var < (int)delimiters.size(); ++var) {
187 vector<string> output1;
188 for (
int var1 = 0; var1 < (int)output.size(); ++var1) {
189 splitInternal(output1, output.at(var1), delimiters.at(var));
191 output.swap(output1);
195 void StringUtil::trim(
string& str)
199 size_t p2 = str.find_last_not_of(c);
200 while(str[p2]==
' ' || str[p2]==
'\t' || str[p2]==
'\n' || str[p2]==
'\r')
202 str = str.substr(0, p2);
203 p2 = str.find_last_not_of(str[p2]);
205 if (p2 == string::npos)
207 size_t p1 = str.find_first_not_of(c);
208 while(str[p1]==
' ' || str[p1]==
'\t' || str[p1]==
'\n' || str[p1]==
'\r')
210 str = str.substr(p1);
211 p1 = str.find_first_not_of(str[p1]);
213 if (p1 == string::npos)
215 str = str.substr(p1, (p2-p1)+1);
218 string StringUtil::trimCopy(
const string& str)