注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

因为业务需要需要比较字符串A+比a要重要,排序A+,A,B++,B+,B,C++,C+,C  

2014-03-06 23:29:39|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
因为业务需要需要比较字符串A+比a要重要,排序A+,A,B++,B+,B,C++,C+,C
而默认的字母排序是不能支持这种排序,A比A+要小,A+比B要小,其中按照排序应该排位A+ <A<B+<B
所以需要重新实现比较函数。

要求:
   字符串不区分大小写
   应该兼容中文全角的字符,包括+
   实现A+ 比A要大。

下面的代码实现 中文全角字符 转为 英文字符

private static String toLetter(String str){
if(str == null || str.length() == 0){
return str;
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<str.length();i++){
char c = str.charAt(i);

//如果在中文全角的字符范围内,转成英文

if(c >= 'a' && c <= 'z'){
char d = (char)(c - ( 'a' - 'a'));
sb.append(d);
}else if(c == '+'){//如果是中文的+号,转成英文+
sb.append("+");
}else{
sb.append(c);
}
}
return sb.toString();
}

函数转换功能如下:
a+abcdefghijklmnhijklmnopqrstuvwxsyzbz++
a+abcdefghijklmnhijklmnopqrstuvwxsyzbz++
改函数可以将上面的中文全角字符 转为 下面英文半角字符串。


比较函数

public static int compare(String s1, String s2) {

//转化中文字符为英文字符

s1 = toLetter(s1);
s2 = toLetter(s2);

//字母自然顺序的比较
int n1 = s1.length();
int n2 = s2.length();
int min = Math.min(n1, n2);
for (int i = 0; i < min; i++) {
char c1 = s1.charAt(i);
char c2 = s2.charAt(i);
if (c1 != c2) {
c1 = Character.toUpperCase(c1);
c2 = Character.toUpperCase(c2);
if (c1 != c2) {
c1 = Character.toLowerCase(c1);
c2 = Character.toLowerCase(c2);
if (c1 != c2) {
// No overflow because of numeric promotion
return c1 - c2;
}
}
}
}

//如果字母排序比较不出来大小
char end;
if(n1 > n2){//当s1字符串长度长时,比s2多长出来的字符如果是英文+返回-1,即A+< A,注,前面已经将中文+转为英文+
end = s1.charAt(min);
if('+' == end){
return -1;
}
}else if(n1 < n2){//同上,相反
end = s2.charAt(min);
if('+' == end){
return 1;
}
}

return n1 - n2;
}

比如比较这两个串
s1 = "a+++";
s2 = "a+++";
返回值为0

比如比较这两个串
s1 = "a+++";
s2 = "a++";
返回值为-1;
比如比较这两个串
s1 = "a+";
s2 = "a++";
返回值为1;
  评论这张
 
阅读(636)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016