14 using std::string_view;
30 inline static const bool startsWith(
const string& str,
const string& prefix) {
31 return str.find(prefix) == 0;
40 inline static const bool viewStartsWith(
const string_view& str,
const string_view& prefix) {
41 return str.find(prefix) == 0;
50 inline static const bool endsWith(
const string& str,
const string& suffix) {
52 str.size() >= suffix.size() &&
53 str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
62 inline static const bool viewEndsWith(
const string_view& str,
const string_view& suffix) {
64 str.size() >= suffix.size() &&
65 str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
81 int64_t beginIndex = 0,
96 int64_t beginIndex = 0,
113 int64_t beginIndex = 0,
128 int64_t endIndex = string::npos,
163 auto result =
viewSubstring(string_view(str), beginIndex, endIndex, cache);
164 return string(result.data(), result.size());
186 const string& string1,
187 const string& string2,
231 static bool regexMatch(
const string& str,
const string& pattern, smatch* matches =
nullptr);
240 static bool regexSearch(
const string& str,
const string& pattern, smatch* matches =
nullptr);
249 static const string regexReplace(
const string& str,
const string& pattern,
const string& by);
258 static const vector<string>
tokenize(
const string& str,
const string& delimiters,
bool emptyTokens =
false);
287 inline static const string indent(
const string& str,
const string& with, int64_t count) {
289 for (
auto i = 0; i < count; i++) result+= with;
299 inline static const string generate(
const string& what, int64_t count = 1) {
301 for (
auto i = 0; i < count; i++) result+= what;