记录一个当比较符与比较值合并为字符串时的通用比较方法

    技术2024-07-30  75

    记录一个当比较符与比较值合并为字符串时的通用比较方法

    public class CompareUtil { /** * 数据对比对外入口 * * @param s 比较值 * @param str 被比较值与比较符号拼接的字符串 * @return */ public static boolean compare(Integer s, String str) { //简单的对入参进行校验 if (s == null || str == null || str.length() == 0) { return false; } else { //比较符号 StringBuffer cs = new StringBuffer(); //比较符号之前的数字(设想中只有范围类型比较会有) StringBuffer start = new StringBuffer(); //比较符号之后的数字 StringBuffer end = new StringBuffer(); format(str.toCharArray(), cs, start, end); //符号是否长度为0 或比较符后的数字长度为0 if (cs.length() == 0 || end.length() == 0) { return false; } else if (start.length() == 0) { //是否符号之前有数字,有则调用范围类型比较方法,否则调用其他比较方法 return compare(s, cs.toString(), Integer.parseInt(end.toString())); } else { return compare(s, cs.toString(), Integer.parseInt(start.toString()), Integer.parseInt(end.toString())); } } } /** * @param s 比较值 * @param str 比较符号 * @param n 被比较值 * @return */ static boolean compare(int s, String str, int n) { switch (str) { case ">=": return s >= n; case "<=": return s <= n; case "<>": case "!=": return s != n; case "=": case "==": return s == n; case "<": return s < n; case ">": return s > n; default: return false; } } /** * @param s 比较值 * @param str 比较符号 * @param n 被比较值1 * @param m 被比较值2 * @return */ static boolean compare(int s, String str, int n, int m) { switch (str) { case ">=<=": return s >= n || s <= m; case ">=<": return s >= n || s < m; case "><=": return s > n || s <= m; case "><": return s > n || s < m; case "<=>=": return s <= n || s >= m; case "<=>": return s <= n || s < m; case "<>=": return s < n || s >= m; case "<>": return s < n || s > m; default: return false; } } /** * 对数据进行处理 出现非连续无数字字符时清空StringBuffer对象 例:1111<>2<3(非连续无数字字符) * * @param chars 处理字符集合 * @param cs 非数字符号集合 * @param start @cs 之前数字集合 * @param end @cs 之后数字集合 */ private static void format(char[] chars, StringBuffer cs, StringBuffer start, StringBuffer end) { for (char s : chars) { //判断是否是数字 if ((byte) s < 58 && (byte) s > 48) { //判断非数字的StringBuffer对象是否有值,确定是字符前数字还是字符后数字 if (cs.length() == 0) { start.append(s); } else { end.append(s); } } else if (end.length() == 0) { cs.append(s); } else { //当出现非连续无数字字符时清空StringBuffer对象 cs.setLength(0); start.setLength(0); end.setLength(0); break; } } } }
    Processed: 0.050, SQL: 9