比这篇新的文章:
Codee#2642
比这篇旧的文章: Codee#2640
作者: 云之麒, 点击105次, 评论(0), 收藏者(0), , 打分:
所有评论,共0条:( 我也来说两句)
比这篇旧的文章: 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 }
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条:( 我也来说两句)
代码
