/*
* Copyright (c) 2013, OpenCloudDB/MyCAT and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software;Designed and Developed mainly by many Chinese
* opensource volunteers. you can redistribute it and/or modify it under the
* terms of the GNU General Public License version 2 only, as published by the
* Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Any questions about this component can be directed to it's project Web address
* https://code.google.com/p/opencloudb/.
*
*/
package org.opencloudb.util;
public class CompareUtil {
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){
// System.out.println(l + " " + r);
if(l > r){
return 1;
}else if(l < r){
return -1;
}else{
return 0;
}
}
public static int compareString(String l,String r){
// return compareStringForChinese(l,r);
if(l == null)
return -1;
else if(r == null)
return 1;
return l.compareTo(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);
}
private 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;
}
}