[英]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.