将数组[j,K,a,A,f,F]排序成[A,a,F,f,j,K]
貌似不能按照ascii码来排,还请大虾帮忙解决!

解决方案 »

  1.   

    做一个简单映射,比如把大写字母映射到某个2n,小写字母映射到对应的2n+1,依次类推,ok
      

  2.   

    把所有字符转化成小写的 转换过的加个标示位  然后排序呗...  用HashMap   最后在把有标示位的还原回来
      

  3.   

    想法完全可以实现,或者大小写字母排到俩个数组中,最后在利用ASSCII码的差值合在一起。
      

  4.   

    justinavril能不能给点代码提示?如果是把大写的加一个标识位,那么在HashMap中不是有些key是空的吗?这样如何排序?
      

  5.   

    做个Comparator
    大写CODE+N*2
    小写插进去
      

  6.   

    转成Character类
    写个Comparator比较toLowerCase后的值'a'<'b',和原先的值'A'<'a'
    Arrays.sort就可以了
      

  7.   

    简单写了一个
    public class ComparetorTest {
        public static void main(String[] args) {
            char[] arr = {'j', 'K', 'a', 'A', 'f', 'F'};        Map<Double, String> kv = new HashMap<Double, String>();
            Double[] dArr = new Double[arr.length];        for (int i = 0; i < arr.length; i++) {
                dArr[i] = (arr[i] >= 'a') ? arr[i] - 31.5D : arr[i];
                kv.put(dArr[i], String.valueOf(arr[i]));
            }        Arrays.sort(dArr);        for (Double d: dArr) {
                System.out.print(kv.get(d) + ",");
            }
        }
    }
    输出:
    A,a,F,f,j,K,
      

  8.   

    借用这位兄弟的思想:
    import java.util.*;
    public class Test2
    {
    public static void main(String[] args)
    {
    char[] ch={'j','K','a','A','f','F'};
    int[] temp=new int[ch.length];
    for(int i=0;i<ch.length;i++)
    {
    if(Character.isLowerCase(ch[i]))
    {
    temp[i]=2*((int)ch[i]-97)+1;
    }
    else
    {
    temp[i]=2*((int)ch[i]-64);
    }
    System.out.println(temp[i]);
    }
    Arrays.sort(temp);
    for(int i=0;i<ch.length;i++)
    {
    if(temp[i]%2==0)
    {
    System.out.print((char)(temp[i]/2+64));
    }
    else
    {
    System.out.print((char)((temp[i]-1)/2+97));
    }
    }
    }
    }
      

  9.   

    public class ComparetorTest { 
        public static void main(String[] args) { 
            char[] arr = {'j', 'K', 'a', 'A', 'f', 'F'};         Map <Double, String> kv = new HashMap <Double, String>(); 
            Double[] dArr = new Double[arr.length];         for (int i = 0; i < arr.length; i++) { 
                dArr[i] = (arr[i] >= 'a') ? arr[i] - 31.5D : arr[i]; 
                kv.put(dArr[i], String.valueOf(arr[i])); 
            }         Arrays.sort(dArr);         for (Double d: dArr) { 
                System.out.print(kv.get(d) + ","); 
            } 
        } 
      

  10.   

    哈哈,好多高手啊 这个方法最好了,自己改写比较器里的方法就好了 
    再调用ArrayList.sort()方法
      

  11.   

    public class Test01 { public static void main(String[] args) {
    char ch[] = {'j','K','a','A','f','F'};
    System.out.println("before sorting, array=" + Arrays.toString(ch));
    for (int i = 0; i < ch.length; i++) {
    for (int j = 0; j < ch.length-1; j++) {
    if (lt(ch[i], ch[j])) {
    char t = ch[i];
    ch[i]=ch[j];
    ch[j]=t;
    }
    }
    }
    System.out.println("after sorting, array=" + Arrays.toString(ch));
    }

    private static boolean lt(char c, char d) {
    if (c == d - 'A' + 'a') {
    return false;
    }
    if (c - 'A' + 'a' == d) {
    return true;
    }
    return Character.toLowerCase(c) - Character.toLowerCase(d) < 0;
    }
    }