记录一个当比较符与比较值合并为字符串时的通用比较方法
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;
}
}
}
}