• JAVA工具类匹配重复或者连续的字符和符号


    1. import java.util.ArrayList;
    2. import java.util.List;
    3. public class StringChecker {
    4. static String SYMBOLS = "~!@#$%^&*()_+{}|<>?,./";
    5. static List symbolSubstrings = splitStringIntoSubstrings(SYMBOLS, 3);
    6. /**
    7. * 检查字符串是否包含重复或递增的字符
    8. *
    9. * @param str 要检查的字符串
    10. * @return 如果字符串包含重复或递增的字符,则返回true;否则返回false
    11. */
    12. public static boolean containsRepeatingOrIncrementalChars(String str) {
    13. int length = str.length();
    14. if (length < 3) {
    15. return false;
    16. }
    17. int[] asciiArray = convertToAsciiArray(str);
    18. for (int i = 0; i < asciiArray.length; i++) {
    19. if (i >= asciiArray.length - 2) {
    20. break;
    21. }
    22. int current = asciiArray[i];
    23. int next = asciiArray[i + 1];
    24. int afterNext = asciiArray[i + 2];
    25. // 校验重复或递增的数字或字母
    26. if ((next == current + 1 && afterNext == next + 1) || (current == next && next == afterNext)) {
    27. return true;
    28. }
    29. }
    30. for (String symbol : symbolSubstrings) {
    31. if (str.contains(symbol)) {
    32. return true;
    33. }
    34. }
    35. return false;
    36. }
    37. /**
    38. * 将字符串按指定长度拆分成子串
    39. *
    40. * @param str 要拆分的字符串
    41. * @param substringLength 子串的长度
    42. * @return 拆分后的子串列表
    43. */
    44. public static List splitStringIntoSubstrings(String str, int substringLength) {
    45. List substrings = new ArrayList<>();
    46. for (int i = 0; i < str.length(); i++) {
    47. if (i + substringLength > str.length()) {
    48. break;
    49. }
    50. int endIndex = Math.min(i + substringLength, str.length());
    51. String substring = str.substring(i, endIndex);
    52. substrings.add(substring);
    53. }
    54. return substrings;
    55. }
    56. /**
    57. * 将字符串转换为ASCII码数组
    58. *
    59. * @param str 要转换的字符串
    60. * @return ASCII码数组
    61. */
    62. public static int[] convertToAsciiArray(String str) {
    63. int[] asciiArray = new int[str.length()];
    64. for (int i = 0; i < str.length(); i++) {
    65. asciiArray[i] = (int) str.charAt(i);
    66. }
    67. return asciiArray;
    68. }
    69. public static void main(String[] args) {
    70. System.out.println(containsRepeatingOrIncrementalChars("abc3132132")); // true
    71. System.out.println(containsRepeatingOrIncrementalChars("123fasfadfas")); // true
    72. System.out.println(containsRepeatingOrIncrementalChars("!@#dfafa")); // true
    73. System.out.println(containsRepeatingOrIncrementalChars("aabc")); // true
    74. System.out.println(containsRepeatingOrIncrementalChars("fas12@##")); // false
    75. }
    76. }

  • 相关阅读:
    【Vue】学习笔记-Vue中的Ajax配置代理
    redis 登录案例
    链表(二)——LinkedList(双向链表)的CURD操作的模拟实现
    Rust5.2 Generic Types, Traits, and Lifetimes
    chromedriver下载地址
    ssh工具paramiko pyqt工具
    MyBatis-TypeHandler(数据类型转换)
    c# 文件转为byte 存储到SQL Server数据库,数据库读取byte字段下载到本地
    【ubuntu中的docker记录】—— 使用docker的常用的指令记录,持续更新中
    Elasticsearch搜索引擎:ES的segment段合并原理
  • 原文地址:https://blog.csdn.net/qq_29752857/article/details/134513906