Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
StringUtils.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
21// Some static methods for string processing
22/****************************************************************************/
23#pragma once
24#include <config.h>
25#include <string>
26#include <chrono>
27#include <sstream>
28#include <iomanip>
30
31
32// ===========================================================================
33// class definitions
34// ===========================================================================
40
41public:
42
44 static std::string prune(const std::string& str);
45
47 static std::string pruneZeros(const std::string& str, int max);
48
50 static std::string to_lower_case(const std::string& str);
51
53 static std::string to_upper_case(const std::string& str);
54
56 static std::string latin1_to_utf8(std::string str);
57
59 static std::string convertUmlaute(std::string str);
60
62 static std::string replace(std::string str, const std::string& what, const std::string& by);
63
65 static std::string substituteEnvironment(const std::string& str, const std::chrono::time_point<std::chrono::system_clock>* const timeRef = nullptr);
66
68 static std::string isoTimeString(const std::chrono::time_point<std::chrono::system_clock>* const timeRef = nullptr);
69
71 static bool startsWith(const std::string& str, const std::string prefix);
72
74 static bool endsWith(const std::string& str, const std::string suffix);
75
77 static std::string padFront(const std::string& str, int length, char padding);
78
88 static std::string escapeXML(const std::string& orig, const bool maskDoubleHyphen = false);
89
93 static std::string escapeShell(const std::string& orig);
94
103 static std::string escapeCSV(const std::string& orig, const char separator, const char quote = '"');
104
106 static std::string emptyString;
107
109 static std::string urlEncode(const std::string& url, const std::string encodeWhich = "");
110
112 static std::string urlDecode(const std::string& encoded);
113
115 static std::string charToHex(unsigned char c);
116
118 static unsigned char hexToChar(const std::string& str);
119
124 static int toInt(const std::string& sData);
125
127 static bool isInt(const std::string& sData);
128
131 static int toIntSecure(const std::string& sData, int def);
132
137 static long long int toLong(const std::string& sData);
138
140 static bool isLong(const std::string& sData);
141
146 static int hexToInt(const std::string& sData);
147
149 static bool isHex(std::string sData);
150
155 static double toDouble(const std::string& sData);
156
158 static bool isDouble(const std::string& sData);
159
162 static double toDoubleSecure(const std::string& sData, const double def);
163
170 static bool toBool(const std::string& sData);
171
173 static bool isBool(const std::string& sData);
174
176 static MMVersion toVersion(const std::string& sData);
177
179 static double parseDist(const std::string& sData);
180
182 static double parseSpeed(const std::string& sData, const bool defaultKmph = true);
183
185 static std::string trim_left(const std::string s, const std::string& t = " \t\n");
186
188 static std::string trim_right(const std::string s, const std::string& t = " \t\n");
189
191 static std::string trim(const std::string s, const std::string& t = " \t\n");
192
194 static std::string wrapText(const std::string s, int width);
195
197 static std::string adjustDecimalValue(double value, int precision);
198
200 // variadic function
201 template<typename T, typename... Targs>
202 static const std::string format(const std::string& format, T value, Targs... Fargs) {
203 std::ostringstream os;
204 os << std::fixed << std::setprecision(gPrecision);
205 _format(format.c_str(), os, value, Fargs...);
206 return os.str();
207 }
208
209private:
210 static void _format(const char* format, std::ostringstream& os) {
211 os << format;
212 }
213
215 // variadic function
216 template<typename T, typename... Targs>
217 static void _format(const char* format, std::ostringstream& os, T value, Targs... Fargs) {
218 for (; *format != '\0'; format++) {
219 if (*format == '%') {
220 os << value;
221 _format(format + 1, os, Fargs...); // recursive call
222 return;
223 }
224 os << *format;
225 }
226 }
227};
int gPrecision
the precision for floating point outputs
Definition StdDefs.cpp:27
std::pair< int, double > MMVersion
(M)ajor/(M)inor version for written networks and default version for loading
Definition StdDefs.h:71
Some static methods for string processing.
Definition StringUtils.h:39
static std::string pruneZeros(const std::string &str, int max)
Removes trailing zeros (at most 'max')
static std::string urlEncode(const std::string &url, const std::string encodeWhich="")
encode url (stem from http://bogomip.net/blog/cpp-url-encoding-and-decoding/)
static bool isDouble(const std::string &sData)
check if the given sData can be conveted to double
static MMVersion toVersion(const std::string &sData)
parse a (network) version string
static bool isBool(const std::string &sData)
check if the given value can be converted to bool
static std::string to_upper_case(const std::string &str)
Transfers the content to upper case.
static std::string charToHex(unsigned char c)
char to hexadecimal
static std::string urlDecode(const std::string &encoded)
decode url (stem from http://bogomip.net/blog/cpp-url-encoding-and-decoding/)
static long long int toLong(const std::string &sData)
converts a string into the long value described by it by calling the char-type converter,...
static double toDoubleSecure(const std::string &sData, const double def)
converts a string into the integer value described by it
static std::string trim(const std::string s, const std::string &t=" \t\n")
remove leading and trailing whitespace
static std::string to_lower_case(const std::string &str)
Transfers the content to lower case.
static void _format(const char *format, std::ostringstream &os, T value, Targs... Fargs)
adds a new formatted message
static std::string trim_right(const std::string s, const std::string &t=" \t\n")
remove trailing whitespace from string
static void _format(const char *format, std::ostringstream &os)
static std::string trim_left(const std::string s, const std::string &t=" \t\n")
remove leading whitespace from string
static std::string escapeShell(const std::string &orig)
Escape special characters with backslash.
static std::string replace(std::string str, const std::string &what, const std::string &by)
Replaces all occurrences of the second string by the third string within the first string.
static int hexToInt(const std::string &sData)
converts a string with a hex value into the integer value described by it by calling the char-type co...
static double toDouble(const std::string &sData)
converts a string into the double value described by it by calling the char-type converter
static std::string escapeXML(const std::string &orig, const bool maskDoubleHyphen=false)
Replaces the standard escapes by their XML entities.
static bool isHex(std::string sData)
check if the given string can be converted to hex
static std::string latin1_to_utf8(std::string str)
Transfers from Latin 1 (ISO-8859-1) to UTF-8.
static std::string prune(const std::string &str)
Removes trailing and leading whitechars.
static std::string padFront(const std::string &str, int length, char padding)
static std::string convertUmlaute(std::string str)
Converts german "Umlaute" to their latin-version.
static double parseDist(const std::string &sData)
parse a distance, length or width value with a unit
static std::string adjustDecimalValue(double value, int precision)
write with maximum precision if needed but remove trailing zeros
static unsigned char hexToChar(const std::string &str)
hexadecimal to char
static const std::string format(const std::string &format, T value, Targs... Fargs)
adds a new formatted message
static bool startsWith(const std::string &str, const std::string prefix)
Checks whether a given string starts with the prefix.
static std::string wrapText(const std::string s, int width)
remove leading and trailing whitespace
static double parseSpeed(const std::string &sData, const bool defaultKmph=true)
parse a speed value with a unit
static std::string emptyString
An empty string.
static bool endsWith(const std::string &str, const std::string suffix)
Checks whether a given string ends with the suffix.
static std::string substituteEnvironment(const std::string &str, const std::chrono::time_point< std::chrono::system_clock > *const timeRef=nullptr)
Replaces an environment variable with its value (similar to bash); syntax for a variable is ${NAME}.
static bool isLong(const std::string &sData)
Check if the given sData can be converted to long.
static int toIntSecure(const std::string &sData, int def)
converts a string into the integer value described by it
static std::string isoTimeString(const std::chrono::time_point< std::chrono::system_clock > *const timeRef=nullptr)
Returns an ISO8601 formatted time string with microsecond precision.
static std::string escapeCSV(const std::string &orig, const char separator, const char quote='"')
Adds quotes to strings containing the separator or the quote char and escapes the quote char with a b...
static int toInt(const std::string &sData)
converts a string into the integer value described by it by calling the char-type converter,...
static bool isInt(const std::string &sData)
check if the given sData can be converted to int
static bool toBool(const std::string &sData)
converts a string into the bool value described by it by calling the char-type converter