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

简介: JAVA工具类匹配重复或者连续的字符和符号
import java.util.ArrayList;
import java.util.List;
 
public class StringChecker {
    static String SYMBOLS = "~!@#$%^&*()_+{}|<>?,./";
    static List<String> symbolSubstrings = splitStringIntoSubstrings(SYMBOLS, 3);
 
    /**
     * 检查字符串是否包含重复或递增的字符
     *
     * @param str 要检查的字符串
     * @return 如果字符串包含重复或递增的字符,则返回true;否则返回false
     */
    public static boolean containsRepeatingOrIncrementalChars(String str) {
        int length = str.length();
        if (length < 3) {
            return false;
        }
        int[] asciiArray = convertToAsciiArray(str);
 
        for (int i = 0; i < asciiArray.length; i++) {
            if (i >= asciiArray.length - 2) {
                break;
            }
            int current = asciiArray[i];
            int next = asciiArray[i + 1];
            int afterNext = asciiArray[i + 2];
            // 校验重复或递增的数字或字母
            if ((next == current + 1 && afterNext == next + 1) || (current == next && next == afterNext)) {
                return true;
            }
        }
 
        for (String symbol : symbolSubstrings) {
            if (str.contains(symbol)) {
                return true;
            }
        }
        return false;
    }
 
    /**
     * 将字符串按指定长度拆分成子串
     *
     * @param str             要拆分的字符串
     * @param substringLength 子串的长度
     * @return 拆分后的子串列表
     */
    public static List<String> splitStringIntoSubstrings(String str, int substringLength) {
        List<String> substrings = new ArrayList<>();
 
        for (int i = 0; i < str.length(); i++) {
            if (i + substringLength > str.length()) {
                break;
            }
            int endIndex = Math.min(i + substringLength, str.length());
            String substring = str.substring(i, endIndex);
            substrings.add(substring);
        }
 
        return substrings;
    }
 
    /**
     * 将字符串转换为ASCII码数组
     *
     * @param str 要转换的字符串
     * @return ASCII码数组
     */
    public static int[] convertToAsciiArray(String str) {
        int[] asciiArray = new int[str.length()];
 
        for (int i = 0; i < str.length(); i++) {
            asciiArray[i] = (int) str.charAt(i);
        }
 
        return asciiArray;
    }
 
    public static void main(String[] args) {
        System.out.println(containsRepeatingOrIncrementalChars("abc3132132"));    // true
        System.out.println(containsRepeatingOrIncrementalChars("123fasfadfas")); // true
        System.out.println(containsRepeatingOrIncrementalChars("!@#dfafa"));      // true
        System.out.println(containsRepeatingOrIncrementalChars("aabc"));          // true
        System.out.println(containsRepeatingOrIncrementalChars("fas12@##"));      // false
    }
}
目录
相关文章
|
17天前
|
JavaScript Java Android开发
在cmd中运行javac编译java文件报错: 编码GBK的不可映射字符、 非法字符: \65279
在cmd中运行javac编译java文件报错: 编码GBK的不可映射字符、 非法字符: \65279
16 1
|
2天前
|
人工智能 Java 编译器
大头儿子和小头爸爸的战斗--java字符和字符串
大头儿子和小头爸爸的战斗--java字符和字符串
|
4天前
|
算法 Java
基于java雪花算法工具类SnowflakeIdUtils-来自chatGPT
基于java雪花算法工具类SnowflakeIdUtils-来自chatGPT
12 3
|
6天前
|
Java Serverless
Java字符个数统计代码
Java字符个数统计代码
23 6
|
5天前
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
13 1
|
5天前
|
Java
java工具类调用service层,mapper层
java工具类调用service层,mapper层
8 1
|
10天前
|
Java 数据库连接
Java的数据库连接工具类的编写
Java的数据库连接工具类的编写
11 1
|
17天前
|
Java 数据安全/隐私保护
JAVA中MD5加密(MD5工具类)
JAVA中MD5加密(MD5工具类)
16 1
|
24天前
|
存储 并行计算 Java
Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)
Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)
18 2
|
3天前
|
XML 安全 Java
一篇文章讲明白JAVA常用的工具类
一篇文章讲明白JAVA常用的工具类