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")); // trueSystem.out.println(containsRepeatingOrIncrementalChars("123fasfadfas")); // trueSystem.out.println(containsRepeatingOrIncrementalChars("!@#dfafa")); // trueSystem.out.println(containsRepeatingOrIncrementalChars("aabc")); // trueSystem.out.println(containsRepeatingOrIncrementalChars("fas12@##")); // false}
}