前言

主要是关于一些字符串判断相关内容,主要包括判断字符串是否含有空格、是否含有汉字、是否含有字母、是否含有数字、特殊符号等,字符串本身就有很多 Api 可以实现很多功能,但是对于判断方面就少了点,这里把收集到的常用的整理起来,可以直接使用。

函数列表

  • 判断相关 ```kotlin isNotNullOrEmpty :CharSequence不为 null 或者 empty isHasSpecial :是否含有特殊字符,true有,false没有 isHasChinese :是否含有汉字,true有,false没有 isChinese :是否全是汉字 isHasLower :是否含有小写字母,true有,false没有 isLower :是否全是大写字母 isHasCapital :是否含有大写字母,true有,false没有 isCapital :是否全是大写字母 isHasLetter :是否含有字母,不区分大小写,true有,false没有 isLetter :是否全是字母 isHasDigit :是否含有数字,true有,false没有 isDigits :是否全是数字,也可以用isDigitsOnly isDigits2 :是否全是数字,也可以用isDigitsOnly isHasSpace :是否含有空格,true有,false没有 isSpace :是否全是空格

Char.isSpace() :判断字符是否是空格

  1. - 其他
  2. ```kotlin
  3. substringBetween :指定裁剪出str中open和close包含着的那部分字符串
  4. toFirstUpperCase :首字母大写,或者调用capitalize
  5. toFirstLowerCase :首字母小写,或者调用decapitalize
  6. substringUnDigits :截取非数字,只能截取第一段连续的,不在首位截取不到
  7. substringDigits :截取数字,只能截取第一段连续的数字
  8. substringAllDigits :截取数字,截取所有的数字
  9. stringSize :特定字符串的数量
  10. charSize :含有特定字符的数量
  11. spaceSize :含有空格数量
  12. parseUrlByUri :通过 uri 解析网址各部分内容
  13. str2HexStr :字符串转为 16 进制字符串
  14. hexStr2Str :16 进制字符串转为字符串
  15. str2Unicode :字符串转换unicode
  16. unicode2Str :unicode 转字符串

工具类

  1. object CharSequenceKtx {
  2. //匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效
  3. const val SPACE = "[\\s]"
  4. //匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效
  5. const val UN_SPACE = "[\\S]"
  6. //数字字符匹配。等效于 [0-9]
  7. const val DIGITS = "[\\d]"
  8. //非数字字符匹配。等效于 [^0-9]
  9. const val UN_DIGITS = "[\\D]"
  10. //匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效
  11. const val DIGITS_LETTER_UNDERLINE = "[\\w]"
  12. //与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效
  13. const val UN_DIGITS_LETTER = "[\\W]"
  14. //匹配大写字母
  15. const val UPPERCASE_LETTER = "[A-Z]"
  16. //匹配小写字母
  17. const val LOWER_LETTER = "[a-z]"
  18. //匹配字母
  19. const val LETTER = "[a-zA-Z]"
  20. //匹配字母和数字
  21. const val DIGITS_LETTER = "[a-zA-Z0-9]"
  22. //匹配汉字
  23. const val CHINESE = "[\u4e00-\u9fa5]"
  24. //匹配特殊字符
  25. const val SPECIAL_CHARACTERS =
  26. "[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\r|\t"
  27. }
  28. //fun CharSequence?.isBank() = this.isBlank()
  29. fun testSpace(): Unit {
  30. val test: String = "hello"
  31. val test2 = "noSpace"
  32. val test3 = " 2321fdf汉字 --9**&"
  33. val test4 = " he llo "
  34. val test5 = "函数 zifu 2134"
  35. println("----------------")
  36. println(test4.removePrefix(" "))//移除前缀
  37. println(test4.removeSuffix(" "))//移除后缀
  38. /* println(test3.stringSize("2"))
  39. println(test.stringSize("2"))
  40. println(test.stringSize("l"))*/
  41. /* println(test5.replace(Regex("[\\d]"), "*"))//数字替换
  42. println(test5.replace(Regex(CharSequenceKtx.SPACE), ""))//删除所有空格
  43. println(test4.trim())
  44. println(test3.substringBefore("f"))//截取指定字符串之前的内容*/
  45. /* println(test5.toUpperCase())//字母大写
  46. println(test.capitalize())//首字母大写
  47. println(test2.decapitalize())//首字母小写
  48. println(test2.toLowerCase())//字母小写*/
  49. // println(test5.contains(Regex(CharSequenceKtx.DIGITS)))
  50. // println(test5.contains(Regex(CharSequenceKtx.UPPERCASE_LETTER)))
  51. /* println(test.matches(Regex("[a-z]*")))//是否全是小写字母
  52. println(test2.matches(Regex("[a-z]*")))//是否全是小写字母
  53. println(test.contains(Regex(CharSequenceKtx.LOWER_LETTER)))
  54. println(test.matches(Regex("${CharSequenceKtx.LOWER_LETTER}*")))
  55. println("${CharSequenceKtx.LOWER_LETTER}*")
  56. println(test5.contains(Regex(CharSequenceKtx.CHINESE)))
  57. println(test5.matches(Regex(CharSequenceKtx.CHINESE + "*")))*/
  58. // println(test2.first().toUpperCase() + test2.substring(1))
  59. //过滤非数字
  60. /* println(test3.filter {
  61. it.isDigit()
  62. })*/
  63. /* println(test3.substringUnDigits())
  64. println(test2.substringUnDigits())*/
  65. // println(test.substringDigits())
  66. // println(test5.substringDigits())
  67. }
  68. /**
  69. *CharSequence不为 null 或者 empty
  70. */
  71. fun CharSequence?.isNotNullOrEmpty() = !isNullOrEmpty()
  72. /**
  73. *〈指定裁剪出str中open和close包含着的那部分字符串〉
  74. * @param open
  75. * @param close
  76. * @return
  77. */
  78. fun CharSequence?.substringBetween(open: String?, close: String?): String? {
  79. if (isNullOrEmpty() || open.isNullOrEmpty() || close.isNullOrEmpty()) return null
  80. val start = this!!.indexOf(open)
  81. if (start != -1) {
  82. val end = indexOf(close, start + open.length)
  83. if (end != -1) {
  84. return substring(start + open.length, end)
  85. }
  86. }
  87. return null
  88. }
  89. fun CharSequence?.substringBetween(tag: String?) = substringBetween(tag, tag)
  90. /**
  91. *首字母大写,或者调用capitalize
  92. * @return
  93. */
  94. fun CharSequence.toFirstUpperCase(): CharSequence {
  95. if (isEmpty()) {
  96. return ""
  97. }
  98. return first().toUpperCase() + substring(1)
  99. }
  100. /**
  101. *首字母小写,或者调用decapitalize
  102. * @return
  103. */
  104. fun CharSequence.toFirstLowerCase(): CharSequence {
  105. if (isEmpty()) {
  106. return ""
  107. }
  108. return first().toLowerCase() + substring(1)
  109. }
  110. /**
  111. *截取非数字,只能截取第一段连续的,不在首位截取不到
  112. * @return
  113. */
  114. fun CharSequence.substringUnDigits(): CharSequence {
  115. val pattern = Pattern.compile("\\D+")
  116. val matcher = pattern.matcher(this)
  117. while (matcher.find()) {
  118. return matcher.group(0)
  119. }
  120. return ""
  121. }
  122. /**
  123. *截取数字,只能截取第一段连续的数字
  124. * @return
  125. */
  126. fun CharSequence.substringDigits(): CharSequence {
  127. val pattern = Pattern.compile("\\d+")
  128. val matcher = pattern.matcher(this)
  129. while (matcher.find()) {
  130. return matcher.group(0)
  131. }
  132. return ""
  133. }
  134. /**
  135. *截取数字,截取所有的数字
  136. * @return
  137. */
  138. fun CharSequence.substringAllDigits(): CharSequence {
  139. val pattern = Pattern.compile("\\d+")
  140. val matcher = pattern.matcher(this)
  141. val sb = StringBuilder()
  142. while (matcher.find()) {
  143. sb.append(matcher.group())
  144. }
  145. return sb
  146. }
  147. /**
  148. *特定字符串的数量
  149. * @param tag
  150. * @return
  151. */
  152. fun CharSequence.stringSize(tag: String): Int {
  153. return split(tag).size - 1
  154. }
  155. /**
  156. *含有特定字符的数量
  157. * @param char
  158. * @return
  159. */
  160. fun CharSequence.charSize(char: Char): Int {
  161. var count = 0
  162. forEach {
  163. if (it == char) {
  164. count++
  165. }
  166. }
  167. return count
  168. }
  169. /**
  170. *含有空格数量
  171. * @return
  172. */
  173. fun CharSequence.spaceSize(): Int {
  174. var count = 0
  175. forEach {
  176. if (it.isSpace()) {
  177. count++
  178. }
  179. }
  180. return count
  181. }
  182. /**
  183. *是否含有特殊字符,true有,false没有
  184. */
  185. fun CharSequence.isHasSpecial() = contains(Regex(CharSequenceKtx.SPECIAL_CHARACTERS))
  186. /**
  187. *是否含有汉字,true有,false没有
  188. */
  189. fun CharSequence.isHasChinese() = contains(Regex(CharSequenceKtx.CHINESE))
  190. /**
  191. *是否全是汉字
  192. */
  193. fun CharSequence.isChinese() = matches(Regex(CharSequenceKtx.CHINESE + "+"))
  194. /**
  195. *是否含有小写字母,true有,false没有
  196. */
  197. fun CharSequence.isHasLower() = contains(Regex(CharSequenceKtx.LOWER_LETTER))
  198. /**
  199. *是否全是大写字母
  200. */
  201. fun CharSequence.isLower() = matches(Regex(CharSequenceKtx.LOWER_LETTER + "+"))
  202. /**
  203. *是否含有大写字母,true有,false没有
  204. */
  205. fun CharSequence.isHasCapital() = contains(Regex(CharSequenceKtx.UPPERCASE_LETTER))
  206. /**
  207. *是否全是大写字母
  208. */
  209. fun CharSequence.isCapital() = matches(Regex(CharSequenceKtx.UPPERCASE_LETTER + "+"))
  210. /**
  211. *是否含有字母,不区分大小写,true有,false没有
  212. */
  213. fun CharSequence.isHasLetter() = contains(Regex(CharSequenceKtx.LETTER))
  214. /**
  215. *是否全是字母
  216. */
  217. fun CharSequence.isLetter() = matches(Regex(CharSequenceKtx.LETTER + "+"))
  218. /**
  219. *是否含有数字,true有,false没有
  220. */
  221. fun CharSequence.isHasDigit() = contains(Regex(CharSequenceKtx.DIGITS))
  222. /**
  223. *是否全是数字,也可以用isDigitsOnly
  224. */
  225. fun CharSequence.isDigits() = matches(Regex(CharSequenceKtx.DIGITS + "+"))
  226. /**
  227. *是否全都是数字
  228. */
  229. fun CharSequence.isDigits2() = Pattern.compile("[\\d]+").matcher(this).matches()
  230. /**
  231. *是否含有空格,true有,false没有
  232. */
  233. fun CharSequence.isHasSpace() = contains(Regex(CharSequenceKtx.SPACE))
  234. /**
  235. *是否全是空格
  236. */
  237. fun CharSequence.isSpace() = matches(Regex(CharSequenceKtx.SPACE + "+"))
  238. /**
  239. *判断字符是否是空格
  240. */
  241. fun Char.isSpace() = this.toString().isHasSpace()
  242. /**
  243. *通过 uri 解析网址各部分内容
  244. * @param action
  245. */
  246. fun CharSequence?.parseUrlByUri(action: String?) = UriUtils.parseUrlByUri(this?.toString(), action)
  247. /**
  248. * 字符串转为 16 进制字符串
  249. *
  250. * @return
  251. */
  252. fun CharSequence?.str2HexStr() = BytesUtils.str2HexStr(this?.toString())
  253. /**
  254. * 16 进制字符串转为字符串
  255. *
  256. * @return
  257. */
  258. fun CharSequence?.hexStr2Str() = BytesUtils.hexStr2Str(this?.toString())
  259. /**
  260. * 字符串转换unicode
  261. */
  262. fun CharSequence?.str2Unicode() = BytesUtils.string2Unicode(this?.toString())
  263. /**
  264. * unicode 转字符串
  265. */
  266. fun CharSequence?.unicode2Str() = BytesUtils.unicode2String(this?.toString())

持续整理中…