我正在研究JAVA,我对排序字符串有疑问。
在String ArrayList中 我们有字符串值STRUCTURE是“0”+“”+“某些字符串”
例如,
| 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 BBB
2 BBB
6 BBB
3 CC
7 CC
9 QQQ
8 ZZZ
答案 0 :(得分: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;
}
});
答案 1 :(得分:4)
使用Collections.sort(List, Comparator)
。您需要提供自己的Comparator
实施,以实现您的排序要求。
答案 2 :(得分:-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