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函数,这个函数的作用是什么?大家看看谁懂,讲讲呗,呵呵。

解决方案 »

  1.   

    额,就是排序一二,二,三这三个中文数字嘛
    toInt是将中文数字替换成12,2,3 这三个阿拉伯数字。 
    然后就用这个比较器实现了对中文数字的排序
      

  2.   

    Comparator返回3种值分别代表>,<,=
    然后sort方法需要传入待排序数组,以及可用于该数组的比较器两个参数
    toInt函数不就是将中文数字换成阿拉伯数字的字符串么,然后parseint才能转出来,才能计算啊……
      

  3.   

      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);
      }replaceAll("一","1");
    将你字符串里所有的一 变成  1;
    下面的都是如此。
    也就是说,你的字符串是"一二三二二三"
    经过这个操作之后,就会变成 "123223"然后再用Integer.parseInt(str); 将字符串"123223" 变成  数字 123223;
      

  4.   

    例如"一二"
    执行完第一句变成"1二"
    执行完第二句变成"12"
    执行完第三句还是"12"
    执行完第四句变成12
    (不要问我"12"和12什么区别,一个是由两个字符组成的字符串,第二个才是数字)
    现在清楚toInt做了什么没
      

  5.   

    自定义的比较器SampleComparator实现了比较器接口,并重写其抽象方法compare(T o1,To2),细节如下:
    1、通过compare方法的return处可以观察到调用了自定义的toInt方法。
    2、toInt方法的作用即 将“传入的对象”强转为字符串,然后通过String类的replaceAll方法将传入字符串做相应的替换,“一”全部替换为“1”,“二”全部替换为“2”,“三”全部替换为“3”,然后再通过Integer包装类的静态方法parseInt(String str)方法将传入的对象以整型形式返回。例:若传入的参数为“一二一”,则返回“121”。
    3、最后即可根据比较器的比较规则进行比较,即:负整数,0,正整数 分别对应的是 小于指定对象,等于指定对象和大于指定对象。
    说的够具体够明白不?
      

  6.   

    尤其没看懂toInt函数 就是把汉字数字转换成阿拉伯数字啊