排序 数组 String[]

String str = "bb:20;aa:18;cc:19;af:17;dd:21;cc:18;dd:24";
String[] xinxi1 = str.split(";");
Arrays.sort(xinxi1);
for(String s : xinxi1)

{

System.out.println(s.split(":")[0]+"="+s.split(":")[1]);

}

输出结果:aa=18
af=17
bb=20
cc=18
cc=19
dd=21
dd=24

请问各位大侠怎么让他输出英文字母相同时数字按降序排列
如:aa=18
af=17
bb=20
cc=19
cc=18
dd=24
dd=21

[code="java"]
String str = "bb:20;aa:18;cc:19;af:17;dd:21;cc:18;dd:24;ee:5;ee:3;ee:3242";
String[] xinxi1 = str.split(";", -1);
// 只能自己写比较器了
Arrays.sort(xinxi1, new Comparator() {
public int compare(String o1, String o2) {
// 前3个判空
if (o1 == o2) {
return 0;
}
if (o1 == null) {
return 1;
}
if (o2 == null) {
return -1;
}
// 如果key不一样,直接返回key的比较顺序
String[] info1 = o1.split(":", 2);
String[] info2 = o2.split(":", 2);
if (!info1[0].equals(info2[0])) {
return info1[0].compareTo(info2[0]);
}
// 这里有不一样的地方 a:5 a:15,谁排在前,注释掉的地方,是a:5排在前
int i1 = Integer.parseInt(info1[1]);
int i2 = Integer.parseInt(info2[1]);
return i2 - i1;

            // return info2[1].compareTo(info1[1]);
        }
    });
    for (String string : xinxi1) {
        System.out.println(string);
    }[/code]

[quote]
aa:18
af:17
bb:20
cc:19
cc:18
dd:24
dd:21
ee:3242
ee:5
ee:3
[/quote]

[code="java"]我来回答
[/code]import java.util.Arrays;
import java.util.Comparator;

public class pattrat
{

/**
 * @param args
 */
public static void main(String[] args)
{ 
    String str = "bb:20;aa:18;cc:19;af:17;dd:21;cc:18;dd:24"; 
    String[] xinxi1 = str.split(";"); 
    Arrays.sort(xinxi1,new mycomparator());
    for(String s : xinxi1)  
    {  
        System.out.println(s.split(":")[0]+"="+s.split(":")[1]);  
    } 
}

}

class mycomparator implements Comparator
{
public int compare(String lhs,String rhs)
{
String[] fisrst = lhs.split(":");
String[] secend = rhs.split(":");
//英文字母如果相同,按照数字的降序
if(fisrst[0].compareTo(secend[0]) == 0)
{
return -fisrst[1].compareTo(secend[1]);
}
else
{
//其余的按照你原来的排序(这里也可以写成按照前面的字母排序 return fisrst[0].compareTo(secend[0];)
return lhs.compareTo(rhs);
}
}
}

[list]
[*]
[/list]实现一个自己的comparator类就可以了,望采纳。

把切割后的字符串数组转换成List,然后在自定义一个Comparator,通过Collection.sort(list,自定义Comparator),然后再进行排序

[code="java"]package iteye;

import java.util.Arrays;
import java.util.regex.Pattern;

public class KeyValue implements Comparable {
String key;
String value;

public KeyValue(String key, String value) {
    super();
    this.key = key;
    this.value = value;
}

public int compareTo(KeyValue o) {
    int c = this.key.compareTo(o.key);
    return c == 0 ? this.value.compareTo(o.value) : c;
}

public String toString() {
    return key + "=" + value;
}

public static void main(String[] args) {
    String str = "bb:20;aa:18;cc:19;af:17;dd:21;cc:18;dd:24";
    Pattern p = Pattern.compile(";");
    String[] a=p.split(str);
    int n=a.length;
    KeyValue[] b=new KeyValue[n];
    for(int i=0;i<n;i++){
        int index=a[i].indexOf(':');
        b[i]=new KeyValue(a[i].substring(0,index), a[i].substring(index+1));
    }
    Arrays.sort(b);
    for(KeyValue kv:b){
        System.out.println(kv);
    }
}

}
[/code]