如何按最后一个字符排序字符串数组? 最后一个字符是数字。 我想从最高数字到最低数字排序
由于
int usa_celkem = usa + usa_p;
int cesko_celkem = cesko + cesko_p;
int kanada_celkem = kanada + kanada_p;
int slovensko_celkem = slovensko + slovensko_p;
int spanelsko_celkem = spanelsko + spanelsko_p;
int nizozemi_celkem = nizozemi + nizozemi_p;
int nemecko_celkem = nemecko + nemecko_p;
String[] pokus = {
"USA" + Integer.toString(usa_celkem),
"CESKO" + Integer.toString(cesko_celkem),
"KANADA" + Integer.toString(kanada_celkem),
"SLOVENSKO" + Integer.toString(slovensko_celkem),
"SPANELSKO" + Integer.toString(spanelsko_celkem),
"NIZOZEMI" + Integer.toString(nizozemi_celkem),
"NEMECKO" + Integer.toString(nemecko_celkem),
};
答案 0 :(得分:1)
Java 8
您可以通过简单的方式完成此操作。您只需要将数字添加到字符串中并将它们放入数组中,如下所示:
String[] pokus = {"USA10", "CESKO2", "KANADA32", "SLOVENSKO11",
"SPANELSKO22", "NIZOZEMI3", "NEMECKO31"};
Arrays.sort(pokus,(a,b) -> Integer.compare(
Integer.parseInt(b.replaceAll("\\D+","")),
Integer.parseInt(a.replaceAll("\\D+",""))
));
System.out.println(Arrays.toString(pokus));
答案 1 :(得分:0)
假设唯一的数字是数组成员末尾的数字(没有SPANEL2SKO12,即中间的2),您可以使用下面的代码
String[] pokus = {
"USA" + Integer.toString(10),
"CESKO" + Integer.toString(2),
"KANADA" + Integer.toString(32),
"SLOVENSKO" + Integer.toString(11),
"SPANELSKO" + Integer.toString(22),
"NIZOZEMI" + Integer.toString(3),
"NEMECKO" + Integer.toString(31),
};
Arrays.sort(pokus, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int a = Integer.valueOf(o1.replaceAll("[^0-9]", ""));
int b = Integer.valueOf(o2.replaceAll("[^0-9]", ""));
return Integer.compare(b, a);
}
});
for (String poku : pokus) {
System.out.println(poku);
}
输出:
KANADA32
NEMECKO31
SPANELSKO22
SLOVENSKO11
USA10
NIZOZEMI3
CESKO2
答案 2 :(得分:-1)
正如已经指出的那样,你可以为Arrays.sort()编写自己的比较器。
假设您的数组中没有空值或空字符串,您可以使用简单的lambda表达式作为比较器对最后一个字符进行降序排序,如下所示:
Arrays.sort(pokus, (String a, String b) ->
Integer.compare(b.charAt(b.length() - 1), a.charAt(a.length() - 1)));
其中pokus
是数组的名称。