簡體   English   中英

使用比較器對帶有數字和特殊字符的字符串進行排序

[英]Sorting using comparator on string with numbers and special character

我在使用 Comparator 對帶有數字的字符串進行排序時遇到問題,其中我的數據如下:{7.5 mg/5 ml, 5 mg, 5 mg/5 ml, 10 mg, 5 mg/15 ml, 5 mg/5 ml, sample,部分}

我試過下面的代碼

Collections.sort(List<Record> records, new Comparator<Record>(){
    @Override
     public int compare(Record o1, Record o2) {
            return o1.compareTo(o2);
        }
}

當我按升序排序時得到以下輸出 {10 mg, 5 mg, 5 mg/5 ml, 5 mg/15 ml, 5 mg/5 ml, 7.5 mg/5 ml, sample, section}

在上面的輸出中,5 mg 系列的分母沒有正確排序,並且排序就像字符串排序一樣,其中 10 mg 顯示在 5 mg 之前,這是錯誤的。 所需的輸出是:

{5 毫克、5 毫克/5 毫升、5 毫克/5 毫升、5 毫克/15 毫升、7.5 毫克/5 毫升、10 毫克,樣品,切片}

請幫我解決這個問題。

如果您只想對字符串進行排序,就好像它們沒有重音一樣,您可以使用以下命令:

Collections.sort(strs, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        o1 = Normalizer.normalize(o1, Normalizer.Form.NFD);
        o2 = Normalizer.normalize(o2, Normalizer.Form.NFD);
        return o1.compareTo(o2);
    }
});

對於更復雜的用例,您需要閱讀java.text.Collator 下面是一個例子:

Collections.sort(strs, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        Collator usCollator = Collator.getInstance(Locale.US);
        return usCollator.compare(o1, o2);
    }
});

定制訂購:

最終字符串 ORDER = "qazwsxedcvfrtgbnhyujmkiolp";

Arrays.sort(str, new Comparator() {

@Override
public int compare(String o1, String o2) {
   return ORDER.indexOf(o1) -  ORDER.indexOf(o2) ;
}

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM