繁体   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