TDME2  1.9.200
StringTools.cpp
Go to the documentation of this file.
2 
3 #include <algorithm>
4 #include <functional>
5 #include <regex>
6 #include <string>
7 #include <string_view>
8 
9 #include <tdme/tdme.h>
11 
12 using std::find_if;
13 using std::isspace;
14 using std::regex;
15 using std::regex_match;
16 using std::regex_replace;
17 using std::replace;
18 using std::string;
19 using std::string_view;
20 using std::tolower;
21 using std::toupper;
22 using std::transform;
23 
26 
27 const string StringTools::replace(const string& src, const char what, const char by, int beginIndex) {
28  string result = src;
29  std::replace(result.begin() + beginIndex, result.end(), what, by);
30  return result;
31 }
32 
33 const string StringTools::replace(const string& src, const string& what, const string& by, int beginIndex) {
34  string result = src;
35  if (what.empty()) return result;
36  while ((beginIndex = result.find(what, beginIndex)) != std::string::npos) {
37  result.replace(beginIndex, what.length(), by);
38  beginIndex += by.length();
39  }
40  return result;
41 }
42 
43 bool StringTools::equalsIgnoreCase(const string& string1, const string& string2) {
44  string stringA = string1;
45  string stringB = string2;
46  transform(stringA.begin(), stringA.end(), stringA.begin(), (int(*)(int))toupper);
47  transform(stringB.begin(), stringB.end(), stringB.begin(), (int(*)(int))toupper);
48  return stringA == stringB;
49 }
50 
51 const string StringTools::trim(const string& src) {
52  string result = src;
53  result.erase(
54  result.begin(),
55  find_if(
56  result.begin(),
57  result.end(),
58  [](int c) {
59  return isspace(c) == 0;
60  }
61  )
62  );
63  result.erase(
64  find_if(
65  result.rbegin(),
66  result.rend(),
67  [](int c) {
68  return isspace(c) == 0;
69  }
70  ).base(),
71  result.end()
72  );
73  return result;
74 }
75 
76 const string_view StringTools::viewTrim(const string_view& src) {
77  auto start = 0;
78  for (auto i = 0; i < src.size(); i++) {
79  if (isspace(src[i]) != 0) start++; else break;
80  }
81  auto end = 0;
82  for (int i = src.size() - 1; i >= 0; i--) {
83  if (isspace(src[i]) != 0) end++; else break;
84  }
85  return string_view(&src[start], src.size() - start - end);
86 }
87 
88 const string StringTools::toLowerCase(const string& src) {
89  string result = src;
90  transform(result.begin(), result.end(), result.begin(), (int(*)(int))tolower);
91  return result;
92 }
93 
94 const string StringTools::toUpperCase(const string& src) {
95  string result = src;
96  transform(result.begin(), result.end(), result.begin(), (int(*)(int))toupper);
97  return result;
98 }
99 
100 bool StringTools::regexMatch(const string& src, const string& pattern) {
101  // TODO: return found groups
102  return regex_match(src, regex(pattern));
103 }
104 
105 bool StringTools::regexSearch(const string& src, const string& pattern) {
106  // TODO: return found groups
107  return regex_search(src, regex(pattern, std::regex::ECMAScript));
108 }
109 
110 const string StringTools::regexReplace(const string& src, const string& pattern, const string& by) {
111  return regex_replace(src, regex(pattern, std::regex::ECMAScript), by);
112 }
113 
114 const vector<string> StringTools::tokenize(const string& str, const string& delimiters, bool emptyTokens) {
115  StringTokenizer t;
116  t.tokenize(str, delimiters, emptyTokens);
117  return t.getTokens();
118 }
String tokenizer class.
const vector< string > & getTokens()
void tokenize(const string &str, const string &delimiters, bool emptyTokens=false)
Tokenize.
String tools class.
Definition: StringTools.h:22
static const string trim(const string &src)
Trim string.
Definition: StringTools.cpp:51
static const string regexReplace(const string &src, const string &pattern, const string &by)
Replace regex pattern with given string.
static bool equalsIgnoreCase(const string &string1, const string &string2)
Checks if string equals ignoring case.
Definition: StringTools.cpp:43
static bool regexSearch(const string &src, const string &pattern)
Do regex pattern search.
static const string toUpperCase(const string &src)
Transform string to upper case.
Definition: StringTools.cpp:94
static const string_view viewTrim(const string_view &src)
Trim string.
Definition: StringTools.cpp:76
static bool regexMatch(const string &src, const string &pattern)
Check if pattern matches whole string.
static const string toLowerCase(const string &src)
Transform string to lower case.
Definition: StringTools.cpp:88
static const string replace(const string &src, const char what, const char by, int beginIndex=0)
Replace char with another char.
Definition: StringTools.cpp:27
static const vector< string > tokenize(const string &str, const string &delimiters, bool emptyTokens=false)
Tokenize.