繁体   English   中英

如何按除第一个字母以外的所有内容对字符串数组进行排序

[英]How to sort an array of strings by everything but the first letter

对于任何字母AZ和数字1-26我的数组预计具有类似于"B1""C22"元素。 我需要对这个数组进行数字排序,所以我们在排序时不考虑字符串的第一个字符。 这样一个数组{"B1", "A22", "C9"}将被排序为{"B1", "C9", "A22"}

我试图取一个子字符串,但它不起作用,因为我不知道哪些字符串的长度为 3,哪些字符串的长度为 2。

您可以创建自己的比较器来忽略某些字符:

Arrays.sort(s, new MyComparator());
System.out.println(Arrays.toString(s));

class MyComparator implements Comparator<String> {


    @Override
    public int compare(String o1, String o2) {

        // Remove the chars you are want to ignore from o1, o2 
        o1 = o1.substring(1);
        o2 = o2.substring(1);
        return Integer.compare(Integer.parseInt(o1),Integer.parseInt(o2));
        // return o1.compareTo(o2); see petr note bellow
    }
}

如果数组包含大量元素,则可以将Arrays.sort()替换为Arrays.parallelSort()以进行高效排序。

Arrays.sort(arr, 
    (ele1, ele2) -> ele1.substring(1).compareTo(ele2.substring(1)));

如果您确信substring(1)只包含数值,那么您可以按如下方式排序:

Arrays.sort(arr, (Comparator.comparingInt(element -> 
                            Integer.parseInt(element.substring(1)))));

暂无
暂无

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

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