import java.util.Arrays;
import java.util.Comparator;public class SampleComparator implements Comparator { public int compare(Object o1, Object o2) {
return toInt(o1) - toInt(o2);
} private int toInt(Object o) {
String str = (String) o;
str = str.replaceAll("一", "1");
str = str.replaceAll("二", "2");
str = str.replaceAll("三", "3");
//
return Integer.parseInt(str);
} /**
* 测试方法
*/
public static void main(String[] args) {
String[] array = new String[] { "一二", "三", "二" };
Arrays.sort(array, new SampleComparator());
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}}
上面是怎样实现compare函数重写的,尤其没看懂toInt函数,这个函数的作用是什么?大家看看谁懂,讲讲呗,呵呵。
import java.util.Comparator;public class SampleComparator implements Comparator { public int compare(Object o1, Object o2) {
return toInt(o1) - toInt(o2);
} private int toInt(Object o) {
String str = (String) o;
str = str.replaceAll("一", "1");
str = str.replaceAll("二", "2");
str = str.replaceAll("三", "3");
//
return Integer.parseInt(str);
} /**
* 测试方法
*/
public static void main(String[] args) {
String[] array = new String[] { "一二", "三", "二" };
Arrays.sort(array, new SampleComparator());
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}}
上面是怎样实现compare函数重写的,尤其没看懂toInt函数,这个函数的作用是什么?大家看看谁懂,讲讲呗,呵呵。
toInt是将中文数字替换成12,2,3 这三个阿拉伯数字。
然后就用这个比较器实现了对中文数字的排序
然后sort方法需要传入待排序数组,以及可用于该数组的比较器两个参数
toInt函数不就是将中文数字换成阿拉伯数字的字符串么,然后parseint才能转出来,才能计算啊……
String str = (String) o;
str = str.replaceAll("一", "1");
str = str.replaceAll("二", "2");
str = str.replaceAll("三", "3");
//
return Integer.parseInt(str);
}replaceAll("一","1");
将你字符串里所有的一 变成 1;
下面的都是如此。
也就是说,你的字符串是"一二三二二三"
经过这个操作之后,就会变成 "123223"然后再用Integer.parseInt(str); 将字符串"123223" 变成 数字 123223;
执行完第一句变成"1二"
执行完第二句变成"12"
执行完第三句还是"12"
执行完第四句变成12
(不要问我"12"和12什么区别,一个是由两个字符组成的字符串,第二个才是数字)
现在清楚toInt做了什么没
1、通过compare方法的return处可以观察到调用了自定义的toInt方法。
2、toInt方法的作用即 将“传入的对象”强转为字符串,然后通过String类的replaceAll方法将传入字符串做相应的替换,“一”全部替换为“1”,“二”全部替换为“2”,“三”全部替换为“3”,然后再通过Integer包装类的静态方法parseInt(String str)方法将传入的对象以整型形式返回。例:若传入的参数为“一二一”,则返回“121”。
3、最后即可根据比较器的比较规则进行比较,即:负整数,0,正整数 分别对应的是 小于指定对象,等于指定对象和大于指定对象。
说的够具体够明白不?