使用数字和特殊字符

时间:2017-01-10 11:59:20

标签: java comparator

我在使用Comparator对数字字符串进行排序时遇到问题,我的数据如下: {7.5 mg / 5 ml,5 mg,5 mg / 5 ml,10 mg,5 mg / 15 ml,5 mg / 5 ml,样品,切片}

我尝试了以下代码

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,样品,切片}

在上面的输出中,分母没有正确分类为5毫克系列,并且分类也像字符串排序一样,其中10毫克在5毫克之前显示是错误的。所需的输出是:

{5 mg,5 mg / 5 ml,5 mg / 5 ml,5 mg / 15 ml,7.5 mg / 5 ml,10 mg,样品,切片}

请帮我解决此问题。

1 个答案:

答案 0 :(得分:1)

如果您只想对字符串进行排序,就好像它们没有重音一样,您可以使用以下内容:

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);
    }
});

自定义排序:

final String ORDER =“qazwsxedcvfrtgbnhyujmkiolp”;

Arrays.sort(str,new Comparator(){

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

});