JAVA按最后一个char排序字符串数组

时间:2016-06-07 19:29:16

标签: java arrays string char sorted

如何按最后一个字符排序字符串数组? 最后一个字符是数字。 我想从最高数字到最低数字排序

由于

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),
        };

3 个答案:

答案 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是数组的名称。