/* * Copyright 2015 Liu Huanting. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package fm.liu.timo.util; /** * @author Liu Huanting 2015年6月4日 */ public class CompareUtil { public static int compareBytes(byte[] l, byte[] r) { if (l == null || l.length == 0) return -1; else if (r == null || r.length == 0) return 1; boolean isNegetive = l[0] == 45 || r[0] == 45; if (isNegetive == false && l.length != r.length) { return l.length - r.length; } int len = l.length > r.length ? r.length : l.length; int result = 0; int index = -1; for (int i = 0; i < len; i++) { int b1val = l[i]; int b2val = r[i]; if (b1val > b2val) { result = 1; index = i; break; } else if (b1val < b2val) { index = i; result = -1; break; } } if (index == 0) { // first byte compare return result; } else { if (l.length != r.length) { int lenDelta = l.length - r.length; return isNegetive ? 0 - lenDelta : lenDelta; } else { return isNegetive ? 0 - result : result; } } } public static int compareInt(int l, int r) { if (l > r) { return 1; } else if (l < r) { return -1; } else { return 0; } } public static int compareDouble(double l, double r) { if (l > r) { return 1; } else if (l < r) { return -1; } else { return 0; } } public static int compareFloat(float l, float r) { if (l > r) { return 1; } else if (l < r) { return -1; } else { return 0; } } public static int compareLong(long l, long r) { if (l > r) { return 1; } else if (l < r) { return -1; } else { return 0; } } public static int compareString(String l, String r) { if (l == null) return -1; else if (r == null) return 1; return l.compareToIgnoreCase(r); } public static int compareChar(char l, char r) { if (l > r) { return 1; } else if (l < r) { return -1; } else { return 0; } } public static int compareUtilDate(Object left, Object right) { java.util.Date l = (java.util.Date) left; java.util.Date r = (java.util.Date) right; return l.compareTo(r); } public static int compareSqlDate(Object left, Object right) { java.sql.Date l = (java.sql.Date) left; java.sql.Date r = (java.sql.Date) right; return l.compareTo(r); } public static int compareStringForChinese(String s1, String s2) { String m_s1 = null, m_s2 = null; try { // 先将两字符串编码成GBK m_s1 = new String(s1.getBytes("GB2312"), "GBK"); m_s2 = new String(s2.getBytes("GB2312"), "GBK"); } catch (Exception ex) { ex.printStackTrace(); return s1.compareTo(s2); } int res = chineseCompareTo(m_s1, m_s2); // System.out.println("比较:" + s1 + " | " + s2 + "==== Result: " + res); return res; } // 获取一个汉字/字母的Char值 private static int getCharCode(String s) { if (s == null || s.length() == 0) return -1;// 保护代码 byte[] b = s.getBytes(); int value = 0; // 保证取第一个字符(汉字或者英文) for (int i = 0; i < b.length && i <= 2; i++) { value = value * 100 + b[i]; } if (value < 0) { value += 100000; } return value; } // 比较两个字符串 private static int chineseCompareTo(String s1, String s2) { int len1 = s1.length(); int len2 = s2.length(); int n = Math.min(len1, len2); for (int i = 0; i < n; i++) { int s1_code = getCharCode(s1.charAt(i) + ""); int s2_code = getCharCode(s2.charAt(i) + ""); if (s1_code != s2_code) { return s1_code - s2_code; } } return len1 - len2; } }