簡體   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