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]