2

私はJAVAを勉強していますが、文字列の並べ替えについて質問があります。

StringArrayListには文字列値があります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

「数値文字列」+「」+「文字列」で文字列を並べ替えるにはどうすればよいですか

ありがとう

アップデート:


私は1AA2 AA
3 BBB
4 CC
5 BBB
6 AA
7 BBB
8 CC
9 ZZZ10QQQ
で コードブローをテストしました

そして私は得た

0 AA

1 AA

5 AA

4 BBB

2 BBB

6 BBB

3 CC

7 CC

9 QQQ

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 に答える