string_util.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #ifndef STRING_UTIL_H
  2. #define STRING_UTIL_H
  3. #include <stdint.h>
  4. #include <string>
  5. #include "cos_defines.h"
  6. #include "rapidxml/1.13/rapidxml.hpp"
  7. #include "rapidxml/1.13/rapidxml_print.hpp"
  8. #include "rapidxml/1.13/rapidxml_utils.hpp"
  9. namespace qcloud_cos {
  10. class StringUtil {
  11. public:
  12. /**
  13. * @brief 去除string两端的空格
  14. *
  15. * @param s: 待去除空格的字符串,是入参也是出参
  16. *
  17. * @return 返回去除空格后的字符串,即s
  18. */
  19. static std::string& Trim(std::string& s);
  20. /**
  21. * @brief 去除string两端指定的字符串
  22. *
  23. * @param s: 待去除的字符串,入参
  24. * @param trim_value: 删除的字符串
  25. *
  26. * @return 返回Trim后的字符串
  27. */
  28. static std::string Trim(const std::string& s, const std::string& trim_value);
  29. /**
  30. * @brief 将xml转为string
  31. *
  32. * @param xmlObject 需要转换xml对象
  33. *
  34. * @return 返回转换后的string
  35. */
  36. static std::string XmlToString(const rapidxml::xml_document<>& xml_doc);
  37. /**
  38. * @brief 将string转换为xml
  39. *
  40. * @param xmlStr 待转换的string对象
  41. * @param doc 待返回的xml对象[out]
  42. *
  43. * @return 转换成功返回true,否则返回false
  44. */
  45. static bool StringToXml(char* xml_str, rapidxml::xml_document<>* doc);
  46. /**
  47. * @brief 把uint64_t类型的num转换成std::string,长度为8个字节
  48. *
  49. * @param num uint64_t类型
  50. *
  51. * @return 转换后的string
  52. */
  53. static std::string Uint64ToString(uint64_t num);
  54. /**
  55. * @brief 将int转为string
  56. *
  57. * @param num int类型
  58. *
  59. * @return 转换后的string
  60. */
  61. static std::string IntToString(int num);
  62. /**
  63. * @brief 将float转为string
  64. *
  65. * @param num float类型
  66. *
  67. * @return 转换后的string
  68. */
  69. static std::string FloatToString(float num);
  70. /**
  71. * @brief 字符串就地转成全大写
  72. *
  73. * @param s 指向string类型的指针
  74. *
  75. * @return void
  76. */
  77. static void StringToUpper(std::string* s);
  78. /**
  79. * @brief 字符串转成全大写
  80. *
  81. * @param s string类型的常引用
  82. *
  83. * @return 全大写字符串
  84. */
  85. static std::string StringToUpper(const std::string& s);
  86. /**
  87. * @brief 字符串就地转成全小写
  88. *
  89. * @param s 指向string类型的指针
  90. *
  91. * @return void
  92. */
  93. static void StringToLower(std::string* s);
  94. /**
  95. * @brief 字符串转成全小写
  96. *
  97. * @param s string类型的常引用
  98. *
  99. * @return 全大写字符串
  100. */
  101. static std::string StringToLower(const std::string& s);
  102. /**
  103. * @brief 字符串连接
  104. *
  105. * @param str_vec 字符串vector
  106. * @param delimiter 分隔符
  107. *
  108. * @return 字符串
  109. */
  110. static std::string JoinStrings(const std::vector<std::string>& str_vec,
  111. const std::string& delimiter);
  112. /**
  113. * @brief 将string转为uint64_t
  114. *
  115. * @param str string类型
  116. *
  117. * @return 转换后的uint64_t
  118. */
  119. static uint64_t StringToUint64(const std::string& str);
  120. static unsigned StringToUint32(const std::string& str);
  121. /**
  122. * @brief 将string转为int
  123. *
  124. * @param str string类型
  125. *
  126. * @return 转换后的int
  127. */
  128. static int StringToInt(const std::string& str);
  129. /**
  130. * @brief 将string转为float
  131. *
  132. * @param str string类型
  133. *
  134. * @return 转换后的float
  135. */
  136. static float StringToFloat(const std::string& str);
  137. /**
  138. * @brief 判断字符串是否以指定前缀开头
  139. *
  140. * @param str string类型
  141. * @param prefix string类型
  142. *
  143. * @return str的前缀为prefix,则返回true;反之,返回false
  144. */
  145. static bool StringStartsWith(const std::string& str,
  146. const std::string& prefix);
  147. /**
  148. * @brief 判断字符串是否以指定前缀开头(忽略大小写)
  149. *
  150. * @param str string类型
  151. * @param prefix string类型
  152. *
  153. * @return str的前缀为prefix,则返回true;反之,返回false
  154. */
  155. static bool StringStartsWithIgnoreCase(const std::string& str,
  156. const std::string& prefix);
  157. /**
  158. * @brief 移除前缀
  159. *
  160. * @param str string类型
  161. * @param prefix string类型
  162. *
  163. * @return 返回移除了prefix前缀的字符串
  164. */
  165. static std::string StringRemovePrefix(const std::string& str,
  166. const std::string& prefix);
  167. /**
  168. * @brief 判断字符串是否以指定后缀结尾
  169. *
  170. * @param str string类型
  171. * @param suffix string类型
  172. *
  173. * @return str的后缀为suffix,则返回true;反之,返回false
  174. */
  175. static bool StringEndsWith(const std::string& str, const std::string& suffix);
  176. /**
  177. * @brief 判断字符串是否以指定后缀结尾(忽略大小写)
  178. *
  179. * @param str string类型
  180. * @param suffix string类型
  181. *
  182. * @return str的后缀为suffix,则返回true;反之,返回false
  183. */
  184. static bool StringEndsWithIgnoreCase(const std::string& str,
  185. const std::string& suffix);
  186. /**
  187. * @brief 移除后缀
  188. *
  189. * @param str string类型
  190. * @param suffix string类型
  191. *
  192. * @return 返回移除了suffix前缀的字符串
  193. */
  194. static std::string StringRemoveSuffix(const std::string& str,
  195. const std::string& suffix);
  196. /**
  197. * @brief 分割字符串
  198. *
  199. * @param str string类型,待分割字符串
  200. * @param delim char类型,分割符
  201. * @param vec std::vector类型,分割结果
  202. *
  203. * @return void
  204. */
  205. static void SplitString(const std::string& str, char delim,
  206. std::vector<std::string>* vec);
  207. /**
  208. * @brief 分割字符串
  209. *
  210. * @param str string类型,待分割字符串
  211. * @param sep string类型,分割字符串
  212. * @param vec std::vector类型,分割结果
  213. *
  214. * @return void
  215. */
  216. static void SplitString(const std::string& str, const std::string& sep,
  217. std::vector<std::string>* vec);
  218. /**
  219. * @brief 将HTTP_METHOD转成对应的字符串格式
  220. *
  221. * @param method HTTP_METHOD
  222. *
  223. * @return string
  224. */
  225. static std::string HttpMethodToString(HTTP_METHOD method);
  226. static bool IsV4ETag(const std::string& etag);
  227. static bool IsMultipartUploadETag(const std::string& etag);
  228. /**
  229. * @brief 从字符串中获取uint32整型
  230. */
  231. static uint32_t GetUint32FromStrWithBigEndian(const char* str);
  232. /**
  233. * @brief 从字符串中获取uint16整型
  234. */
  235. static uint16_t GetUint16FromStrWithBigEndian(const char* str);
  236. };
  237. } // namespace qcloud_cos
  238. #endif