【问题标题】:JAVA Sorted string array by last charJAVA 按最后一个字符排序的字符串数组
【发布时间】:2016-10-07 20:26:24
【问题描述】:

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

谢谢

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

【问题讨论】:

  • 您可以编写自定义比较器。
  • 您覆盖比较器并在最后一个字符之后排序,否则提供更清晰的数据以便我们为您提供帮助。什么是usa_celkem,其余的,提供USA12之类的完整数据或您要排序的数据。
  • 我想从大到小排序

标签: java arrays string char sorted


【解决方案1】:

假设唯一的数字是数组成员末尾的数字(中间没有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

【讨论】:

  • “我想从最高数到最低数排序” 所以,return Integer.compare(b, a).
【解决方案2】:

如前所述,您可以为Arrays.sort() 编写自己的比较器。

假设您的数组中没有 null 或空字符串,您可以使用简单的 lambda 表达式作为 Comparator 按最后一个字符降序排序,如下所示:

Arrays.sort(pokus, (String a, String b) -> 
            Integer.compare(b.charAt(b.length() - 1), a.charAt(a.length() - 1)));

其中pokus 是数组的名称。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2012-10-14
      • 2020-08-14
      • 2019-08-30
      • 2017-12-28
      • 2015-09-27
      相关资源
      最近更新 更多