1190978c3Sopenharmony_ci/* 2190978c3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3190978c3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4190978c3Sopenharmony_ci * you may not use this file except in compliance with the License. 5190978c3Sopenharmony_ci * You may obtain a copy of the License at 6190978c3Sopenharmony_ci * 7190978c3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8190978c3Sopenharmony_ci * 9190978c3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10190978c3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11190978c3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12190978c3Sopenharmony_ci * See the License for the specific language governing permissions and 13190978c3Sopenharmony_ci * limitations under the License. 14190978c3Sopenharmony_ci */ 15190978c3Sopenharmony_ci 16190978c3Sopenharmony_ci#ifndef STRING_UTILS_H 17190978c3Sopenharmony_ci#define STRING_UTILS_H 18190978c3Sopenharmony_ci 19190978c3Sopenharmony_ci#include <algorithm> 20190978c3Sopenharmony_ci#include <functional> 21190978c3Sopenharmony_ci#include <string> 22190978c3Sopenharmony_ci#include <vector> 23190978c3Sopenharmony_ci 24190978c3Sopenharmony_ci#define GET_ENUM_VALUE_STRING(item) StringUtils::GetEnumValueString(#item) 25190978c3Sopenharmony_ci 26190978c3Sopenharmony_cinamespace OHOS { 27190978c3Sopenharmony_cinamespace UpdateEngine { 28190978c3Sopenharmony_ciclass StringUtils { 29190978c3Sopenharmony_cipublic: 30190978c3Sopenharmony_ci // trim from start (in place) 31190978c3Sopenharmony_ci static inline void LTrim(std::string &inputStr) 32190978c3Sopenharmony_ci { 33190978c3Sopenharmony_ci inputStr.erase(inputStr.begin(), 34190978c3Sopenharmony_ci std::find_if(inputStr.begin(), inputStr.end(), [](unsigned char ch) { return !std::isspace(ch); })); 35190978c3Sopenharmony_ci } 36190978c3Sopenharmony_ci 37190978c3Sopenharmony_ci // trim from end (in place) 38190978c3Sopenharmony_ci static inline void RTrim(std::string &inputStr) 39190978c3Sopenharmony_ci { 40190978c3Sopenharmony_ci inputStr.erase( 41190978c3Sopenharmony_ci std::find_if(inputStr.rbegin(), inputStr.rend(), [](unsigned char ch) { return !std::isspace(ch); }).base(), 42190978c3Sopenharmony_ci inputStr.end()); 43190978c3Sopenharmony_ci } 44190978c3Sopenharmony_ci 45190978c3Sopenharmony_ci // trim from both ends (in place) 46190978c3Sopenharmony_ci static inline void Trim(std::string &inputStr) 47190978c3Sopenharmony_ci { 48190978c3Sopenharmony_ci LTrim(inputStr); 49190978c3Sopenharmony_ci RTrim(inputStr); 50190978c3Sopenharmony_ci } 51190978c3Sopenharmony_ci 52190978c3Sopenharmony_ci static inline std::vector<std::string> Split(const std::string &str, char delimiter) 53190978c3Sopenharmony_ci { 54190978c3Sopenharmony_ci std::vector<std::string> tokens; 55190978c3Sopenharmony_ci size_t start; 56190978c3Sopenharmony_ci size_t end = 0; 57190978c3Sopenharmony_ci while ((start = str.find_first_not_of(delimiter, end)) != std::string::npos) { 58190978c3Sopenharmony_ci end = str.find(delimiter, start); 59190978c3Sopenharmony_ci tokens.push_back(str.substr(start, end - start)); 60190978c3Sopenharmony_ci } 61190978c3Sopenharmony_ci return tokens; 62190978c3Sopenharmony_ci } 63190978c3Sopenharmony_ci 64190978c3Sopenharmony_ci static inline std::string GetBoolStr(bool isTrue) 65190978c3Sopenharmony_ci { 66190978c3Sopenharmony_ci return isTrue ? "true" : "false"; 67190978c3Sopenharmony_ci } 68190978c3Sopenharmony_ci 69190978c3Sopenharmony_ci static std::string SafeSubString(const std::string &sourceStr, int beginIndex, int endIndex, 70190978c3Sopenharmony_ci std::string defaultStr) 71190978c3Sopenharmony_ci { 72190978c3Sopenharmony_ci if (sourceStr.empty()) { 73190978c3Sopenharmony_ci return defaultStr; 74190978c3Sopenharmony_ci } 75190978c3Sopenharmony_ci if (beginIndex < 0 || static_cast<size_t>(endIndex) > sourceStr.size() || beginIndex > endIndex) { 76190978c3Sopenharmony_ci return defaultStr; 77190978c3Sopenharmony_ci } 78190978c3Sopenharmony_ci return sourceStr.substr(beginIndex, endIndex); 79190978c3Sopenharmony_ci } 80190978c3Sopenharmony_ci 81190978c3Sopenharmony_ci static std::string GetEnumValueString(const std::string &enumItem) 82190978c3Sopenharmony_ci { 83190978c3Sopenharmony_ci std::string enumSplit = "::"; 84190978c3Sopenharmony_ci size_t split = enumItem.find(enumSplit); 85190978c3Sopenharmony_ci if (split == std::string::npos) { 86190978c3Sopenharmony_ci return ""; 87190978c3Sopenharmony_ci } 88190978c3Sopenharmony_ci return enumItem.substr(split + enumSplit.length(), enumItem.length()); 89190978c3Sopenharmony_ci } 90190978c3Sopenharmony_ci 91190978c3Sopenharmony_ci static std::string GetLastSplitString(const std::string &stringName, const std::string &splitStr) 92190978c3Sopenharmony_ci { 93190978c3Sopenharmony_ci std::size_t found = stringName.find_last_of(splitStr); 94190978c3Sopenharmony_ci std::string fileString = ""; 95190978c3Sopenharmony_ci if (found != std::string::npos) { 96190978c3Sopenharmony_ci fileString = stringName.substr(found + 1, stringName.size()); 97190978c3Sopenharmony_ci } 98190978c3Sopenharmony_ci return fileString; 99190978c3Sopenharmony_ci } 100190978c3Sopenharmony_ci 101190978c3Sopenharmony_ci static void ReplaceStringAll(std::string &srcString, const std::string &subString, const std::string &newString) 102190978c3Sopenharmony_ci { 103190978c3Sopenharmony_ci std::string resultString = srcString; 104190978c3Sopenharmony_ci for (std::string::size_type pos = 0; pos != std::string::npos; pos += newString.length()) { 105190978c3Sopenharmony_ci pos = resultString.find(subString, pos); 106190978c3Sopenharmony_ci if (pos != std::string::npos) { 107190978c3Sopenharmony_ci resultString.replace(pos, subString.length(), newString); 108190978c3Sopenharmony_ci } else { 109190978c3Sopenharmony_ci break; 110190978c3Sopenharmony_ci } 111190978c3Sopenharmony_ci } 112190978c3Sopenharmony_ci srcString = resultString; 113190978c3Sopenharmony_ci } 114190978c3Sopenharmony_ci 115190978c3Sopenharmony_ci static void StringRemove(std::string &sourceString, const std::string &startString, 116190978c3Sopenharmony_ci const std::string &endString) 117190978c3Sopenharmony_ci { 118190978c3Sopenharmony_ci if (sourceString.empty()) { 119190978c3Sopenharmony_ci return; 120190978c3Sopenharmony_ci } 121190978c3Sopenharmony_ci std::string::size_type indexStart = sourceString.find(startString); 122190978c3Sopenharmony_ci if (indexStart != std::string::npos) { 123190978c3Sopenharmony_ci std::string::size_type indexEnd = sourceString.find(endString, indexStart); 124190978c3Sopenharmony_ci if (indexEnd != std::string::npos) { 125190978c3Sopenharmony_ci std::string tmpString = sourceString.substr(0, indexStart) + 126190978c3Sopenharmony_ci sourceString.substr(indexEnd + endString.length(), sourceString.length()); 127190978c3Sopenharmony_ci sourceString = tmpString; 128190978c3Sopenharmony_ci } 129190978c3Sopenharmony_ci } 130190978c3Sopenharmony_ci return; 131190978c3Sopenharmony_ci } 132190978c3Sopenharmony_ci}; 133190978c3Sopenharmony_ci} // namespace UpdateEngine 134190978c3Sopenharmony_ci} // namespace OHOS 135190978c3Sopenharmony_ci#endif // STRING_UTILS_H