[英]Sorting a String Array using a Comparator based on a Character in the String
[英]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.