比这篇新的文章: Codee#2642
比这篇旧的文章: Codee#2640

Codee#2641

语言: Java, 标签: 无  2009/07/04发布 8个月前更新
作者: 云之麒, 点击105次, 评论(0), 收藏者(0), , 打分:

背景
主题: 字体:
Java语言: Codee#2641
01 package com.bank.util;
02
03 import java.util.Comparator;
04 /**
05 * 字符串比较器
06 * 优先级:数字>特殊字符>字母 , 小写>大写
07 * @author KyLinD http://hi.baidu.com/kylind
08 *
09 */
10 public class StringSortComparator implements Comparator<String> {
11
12     private boolean ignoreCase = true;
13
14     public StringSortComparator() {
15     }
16
17     public StringSortComparator(boolean ignoreCase) {
18         this.ignoreCase = ignoreCase;
19     }
20
21     public int compare(String o1, String o2) {
22         if (ignoreCase) {
23             o1 = o1.toLowerCase();
24             o2 = o2.toLowerCase();
25         }
26         for (int i = 0; i < o1.length(); i++) {
27             if (i == o1.length() && i < o2.length()) {
28                 return -1;
29             } else if (i == o2.length() && i < o1.length()) {
30                 return 1;
31             }
32             char ch1 = o1.charAt(i);
33             char ch2 = o2.charAt(i);
34             if (ch1 >= '0' && ch2 <= '9') {
35                 int i1 = getNumber(o1.substring(i));
36                 int i2 = getNumber(o2.substring(i));
37                 if (i1 == i2) {
38                     continue;
39                 } else {
40                     return i1 - i2;
41                 }
42             } else if (ch1 != ch2) {
43                 return ch1 - ch2;
44             }
45         }
46         return 0;
47     }
48
49     private int getNumber(String str) {
50         int num = Integer.MAX_VALUE;
51         int bits = 0;
52         for (int i = 0; i < str.length(); i++) {
53             if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
54                 bits++;
55             } else {
56                 break;
57             }
58         }
59         if (bits > 0) {
60             num = Integer.parseInt(str.substring(0, bits));
61         }
62         return num;
63     }
64
65 }


所有评论,共0条:( 我也来说两句)


发表评论

注册登录后再发表评论