string_util.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. from app.common.constant import CommonConstant
  2. class StringUtil:
  3. """
  4. 字符串工具类
  5. """
  6. @classmethod
  7. def is_blank(cls, string: str) -> bool:
  8. """
  9. 校验字符串是否为''或全空格
  10. 参数:
  11. - string (str): 需要校验的字符串。
  12. 返回:
  13. - bool: 校验结果。
  14. """
  15. str_len = len(string)
  16. if str_len == 0:
  17. return True
  18. return all(string[i] == " " for i in range(str_len))
  19. @classmethod
  20. def is_empty(cls, string: str | None) -> bool:
  21. """
  22. 校验字符串是否为''或None
  23. 参数:
  24. - string (str | None): 需要校验的字符串。
  25. 返回:
  26. - bool: 校验结果。
  27. """
  28. return string is None or len(string) == 0
  29. @classmethod
  30. def is_not_empty(cls, string: str) -> bool:
  31. """
  32. 校验字符串是否不是''和None
  33. 参数:
  34. - string (str): 需要校验的字符串。
  35. 返回:
  36. - bool: 校验结果。
  37. """
  38. return not cls.is_empty(string)
  39. @classmethod
  40. def is_http(cls, link: str):
  41. """
  42. 判断是否为 http(s):// 开头
  43. 参数:
  44. - link (str): 链接。
  45. 返回:
  46. - bool: 是否为 http(s):// 开头。
  47. """
  48. return link.startswith((CommonConstant.HTTP, CommonConstant.HTTPS))
  49. @classmethod
  50. def contains_ignore_case(cls, search_str: str, compare_str: str):
  51. """
  52. 查找指定字符串是否包含指定字符串同时忽略大小写
  53. 参数:
  54. - search_str (str): 查找的字符串。
  55. - compare_str (str): 比对的字符串。
  56. 返回:
  57. - bool: 查找结果。
  58. """
  59. if compare_str and search_str:
  60. return compare_str.lower() in search_str.lower()
  61. return False
  62. @classmethod
  63. def contains_any_ignore_case(cls, search_str: str, compare_str_list: list[str]):
  64. """
  65. 查找指定字符串是否包含列表中的任意一个字符串(忽略大小写)
  66. 参数:
  67. - search_str (str): 查找的字符串。
  68. - compare_str_list (list[str]): 比对的字符串列表。
  69. 返回:
  70. - bool: 查找结果。
  71. """
  72. if search_str and compare_str_list:
  73. return any(
  74. cls.contains_ignore_case(search_str, compare_str)
  75. for compare_str in compare_str_list
  76. )
  77. return False
  78. @classmethod
  79. def equals_ignore_case(cls, search_str: str, compare_str: str):
  80. """
  81. 比较两个字符串是否相等(忽略大小写)
  82. 参数:
  83. - search_str (str): 查找的字符串。
  84. - compare_str (str): 比对的字符串。
  85. 返回:
  86. - bool: 比较结果。
  87. """
  88. if search_str and compare_str:
  89. return search_str.lower() == compare_str.lower()
  90. return False
  91. @classmethod
  92. def equals_any_ignore_case(cls, search_str: str, compare_str_list: list[str]):
  93. """
  94. 判断指定字符串是否与列表中任意一个字符串相等(忽略大小写)
  95. 参数:
  96. - search_str (str): 查找的字符串。
  97. - compare_str_list (list[str]): 比对的字符串列表。
  98. 返回:
  99. - bool: 比较结果。
  100. """
  101. if search_str and compare_str_list:
  102. return any(
  103. cls.equals_ignore_case(search_str, compare_str) for compare_str in compare_str_list
  104. )
  105. return False
  106. @classmethod
  107. def startswith_case(cls, search_str: str, compare_str: str):
  108. """
  109. 查找指定字符串是否以指定字符串开头
  110. 参数:
  111. - search_str (str): 查找的字符串。
  112. - compare_str (str): 比对的字符串。
  113. 返回:
  114. - bool: 查找结果。
  115. """
  116. if compare_str and search_str:
  117. return search_str.startswith(compare_str)
  118. return False
  119. @classmethod
  120. def startswith_any_case(cls, search_str: str, compare_str_list: list[str]):
  121. """
  122. 查找指定字符串是否以列表中任意一个字符串开头
  123. 参数:
  124. - search_str (str): 查找的字符串。
  125. - compare_str_list (list[str]): 比对的字符串列表。
  126. 返回:
  127. - bool: 查找结果。
  128. """
  129. if search_str and compare_str_list:
  130. return any(
  131. cls.startswith_case(search_str, compare_str) for compare_str in compare_str_list
  132. )
  133. return False
  134. @classmethod
  135. def convert_to_camel_case(cls, name: str) -> str:
  136. """
  137. 将下划线大写方式命名的字符串转换为驼峰式;若输入为空则返回空字符串。
  138. 参数:
  139. - name (str): 下划线大写方式命名的字符串。
  140. 返回:
  141. - str: 转换后的驼峰式命名的字符串。
  142. """
  143. if not name:
  144. return ""
  145. if "_" not in name:
  146. return name[0].upper() + name[1:]
  147. parts = name.split("_")
  148. result = []
  149. for part in parts:
  150. if not part:
  151. continue
  152. result.append(part[0].upper() + part[1:].lower())
  153. return "".join(result)
  154. @classmethod
  155. def get_mapping_value_by_key_ignore_case(cls, mapping: dict[str, str], key: str) -> str:
  156. """
  157. 根据忽略大小写的键获取字典中的对应的值
  158. 参数:
  159. - mapping (dict[str, str]): 字典。
  160. - key (str): 字典的键。
  161. 返回:
  162. - str: 字典键对应的值,未匹配则返回空字符串。
  163. """
  164. for k, v in mapping.items():
  165. if key.lower() == k.lower():
  166. return v
  167. return ""