我有一个像这样的字符串数组:
String[] array = { "CC/2", "DDD/3", "AAAA/4", "B/1" };
Arrays.sort(array);
System.out.println(Arrays.toString(array));
当我执行此代码时,我得到以下内容:
[AAAA/4, B/1, CC/2, DDD/3]
这是正确的,但我想用编号的值对其进行排序,以便得到以下结果:
[B/1, CC/2, DDD/3, AAAA/4]
我该怎么做?
答案 0 :(得分:4)
您可以使用Comparator<String>
/* You may found some shortcuts for this
but following code is easy to understand
*/
String[] array = { "CC/2", "DDD/3", "AAAA/4", "B/1"};
Arrays.sort(array, new Comparator<String>() {
public int compare(String o1, String o2) {
int i1,i2;
/*
You should add some checks like
1] null check
or
2] whether String contains / or not etc before going for further
code.
*/
/* Get Numbers from String To compare */
i1=Integer.valueOf(o1.split("/")[1]);
i2=Integer.valueOf(o2.split("/")[1]);
//May throw NumberFormatException so be careful with this
if(i1>i2)
return 1;
else if(i1<i2)
return -1;
else
return 0;
}
});
System.out.println(Arrays.toString(array));//Print array
答案 1 :(得分:2)
您需要自定义Comparator
:
Comparator<String> c = new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.split("/")[1].compareTo(s2.split("/")[1]);
}
};
String[] array = { "CC/2", "DDD/3", "AAAA/4", "B/1" };
Arrays.sort(array, c);
System.out.println(Arrays.toString(array));
这会打印[B/1, CC/2, DDD/3, AAAA/4]
答案 2 :(得分:2)
使用自定义Comparator
并删除数字前的字符,如下所示:
Arrays.sort(array, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.replaceAll("[A-Z]+/", "").compareTo(o2.replaceAll("[A-Z]+/", ""));
}
});
.replaceAll("[A-Z]+/", "")
部分删除了您的潜在CC/
,AAAA/
,依此类推;假设您的字符串始终以至少一个大写字母开头,后跟斜杠(/
)。
答案 3 :(得分:0)
在Arrays类中查看sort(T [] a,Comparator c):http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
自定义比较器可能就是您想要的
答案 4 :(得分:0)
您必须自己制作排序功能。如果数字始终位于字符串的末尾,则可以使用
来反转字符串 StringBuilder().reverse().toString()