繁体   English   中英

如何根据解析的第一个数字对字符串数组进行排序

[英]How to sort an array of Strings based on the parsed first digit

我刚刚完成了一场编码竞赛,其中一个问题要求我对字符串数组进行排序,但数字是基于字符串中第一个出现的数字。 例如:

String[] array = 
{{"18.sdfahsdfkjadf"},
 {"1.skjfhadksfhad"},
 {"2.asldfalsdf"}};

需要排序为 1.sk... 首先,2.as...,然后是 18.sd... 最后。 但是,如果您使用(在 Java 中)Arrays.sort(array),它将被排序为 1、18,然后是 2,因为它首先离开第一个字符而不是数字。

您可以在\D上拆分每个字符串(这意味着非数字)并根据第一个元素比较字符串,解析为 integer,生成 arrays。

演示:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        String[] array = { "18.sdfahsdfkjadf", "1.skjfhadksfhad", "2.asldfalsdf" };
        
        Arrays.sort(array, 
                        (s1, s2) -> 
                            Integer.compare(
                                                Integer.parseInt(s1.split("\\D")[0]),
                                                Integer.parseInt(s2.split("\\D")[0])
                                            )
                    );

        System.out.println(Arrays.toString(array));
    }
}

Output:

[1.skjfhadksfhad, 2.asldfalsdf, 18.sdfahsdfkjadf]

使用Streams API,您可以生成类似这样的结果(假设数字始终通过标点符号与 rest 分开):

List<String> sorted = Arrays.stream(array).sorted((s1, s2) -> {
         Integer i = Integer.parseInt(s1.split("\\.")[0]);
         Integer j = Integer.parseInt(s2.split("\\.")[0]);
         return i.compareTo(j);
}).collect(Collectors.toList());

结果数组为: [1.skjfhadksfhad, 2.asldfalsdf, 18.sdfahsdfkjadf]

尝试这个。

Arrays.sort(array, Comparator.comparingInt(s -> Integer.parseInt(s.split("\\.")[0])));
System.out.println(Arrays.toString(array));

output:

[1.skjfhadksfhad, 2.asldfalsdf, 18.sdfahsdfkjadf]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM