2

我正在学习 JAVA,我有一个关于排序字符串的问题。

在 String ArrayList 我们有字符串值 STRUCTURE 是 "0" + " " + "some string"

例如,

     | String
     | 0 AA
     | 1 BB
     | 2 AA
     | 3 AA
     | 4 CC
     | 5 BB

当我们对其进行排序时,结果应该是

     | String 
     | 0 AA
     | 2 AA
     | 3 AA
     | 1 BB
     | 5 BB
     | 4 CC

如何使用“数字字符串”+“”+“字符串”对字符串进行排序

谢谢

更新:

我用 1 AA
2 AA
3 BBB
4 CC
5 BBB
6 AA
7 BBB
8 CC
9 ZZZ
10 QQQ 测试了代码攻击

我得到了

0 AA

1 AA

5 AA

4 血脑屏障

2 血脑屏障

6 BBB

3 抄送

7 抄送

9 QQ

8 ZZZ

4

3 回答 3

7

扩展Comparator解决方案(这确实是您应该解决此问题的方式):

Collections.sort(yourList, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        String[] split1 = s1.split(" ");
        String[] split2 = s2.split(" ");

        int n = split1[1].compareTo(split2[1]);

        if (n == 0) {
            return Integer.valueOf(split1[0]).compareTo(
                                  Integer.valueOf(split2[0]));
        }

        return n;
    }
});
于 2012-11-01T23:45:25.177 回答
4

使用Collections.sort(List, Comparator). 您需要提供自己的Comparator实现,它实现了您的排序要求。

于 2012-11-01T23:22:31.767 回答
-4

我在编码时确实考虑了空间和时间的复杂性。我不太确定它的效率是否足够,但它会给你一个想法。

  List<String> l = new ArrayList<>();

        l.add("0 CC");
        l.add("1 BB");
        l.add("2 AA");
        l.add("3 AA");

    String str="";
    for(String s: l){
        str+=s+",";
    }
    String[] sArr = str.split(",");
    String temp="";
    for(int i=0; i<sArr.length;i++) {
        for(int j= i+1; j<sArr.length;j++){
            if(sArr[i].split("\\s")[1].compareToIgnoreCase(sArr[j].split("\\s")[1])>0){
                temp= sArr[j];
                sArr[j]= sArr[i];
                sArr[i]=temp;
            }
        }
    }
    for(String g: sArr){
        System.out.println(g);
    }

output:
2 AA
3 AA
1 BB
0 CC
于 2012-11-01T23:27:26.470 回答